zoukankan      html  css  js  c++  java
  • 使用Redis存储Nginx+Tomcat负载均衡集群的Session

    tomcat-redis-session-manager开源项目的使用

    1、开源项目地址:https://github.com/jcoleman/tomcat-redis-session-manager

    2、下载代码之后需要进行重新编译,生成所需要的jar,任意创建maven项目,将src下的代码拷贝到具体位置,如下:

    maven的pom.xml文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.ufind.session</groupId>
        <artifactId>tomcat-redis-session</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-catalina</artifactId>
                <version>7.0.27</version>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.7.2</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.0</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

    3、然后打开terminal,执行mvn clean 和mvn install 将编译好的代码打包为:tomcat-redis-session-1.0-SNAPSHOT.jar

    4、将tomcat-redis-session-1.0-SNAPSHOT.jar、jedis-2.7.2.jar、commons-pool2-2.0.jar 三个jar包分别放在tomcat1和tomcat2实例下的lib目录下。

    免费下载这三个jar:http://download.csdn.net/detail/u010870518/9585716

    5、修改tomcat实例下conf/contex.xml文件

    <?xml version='1.0' encoding='utf-8'?>  
    <Context>  
        <WatchedResource>WEB-INF/web.xml</WatchedResource>  
    
        <!-- tomcat-redis-session共享配置 -->  
        <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
            <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
             host="192.168.1.149"   
             port="6379"   
             database="0"   
             maxInactiveInterval="60" />  
    
    </Context>

    如果Redis配置了访问权限,请添加密码为:

    <?xml version='1.0' encoding='utf-8'?>  
    <Context>  
        <WatchedResource>WEB-INF/web.xml</WatchedResource>  
    
        <!-- tomcat-redis-session共享配置 -->  
        <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
            <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
             host="192.168.1.149"   
             port="6379"   
             database="0"  
             password="redispassword" 
             maxInactiveInterval="60" />  
    
    </Context>  

    如果不设置密码会报错,如下:

    总结

    tomcat-redis-session-manager是一个对用户完全透明的分布式session存储框架,用户只需要在tomcat中进行简单的配置,就可以使用,我们的业务代码是完全和单实例的时候的代码是一样的的,也就是写代码的时候完全不用担心你写的是一个多tomcat实例的代码,完全透明。

    如何对框架的原理进行简单的理解,我们首先要知道,在请求过程中的session操作,首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中。然后再从 request获取session的时候,如果存在sessionId那么就根据Id从session池中获取session,如果sessionId不存在或者session失效,那么则新建session并且将session信息放入session池,供下次使用。

    如果我们想自己写一个类似于tomcat-redis-session-manager的项目,我们应该知道Tomcat的Session管理机制,在默认的情况下Tomcat的Session管理,如果不进行设置的话是由Tomcat自带的StandardManager类进行控制的,我们可以根据这个类自定义一个Manager,主要重写的就是org.apache.catalina.session.ManagerBase里边的具体写的操作, 
    这也是tomcat-redis-session-manager的基本原理,将tomcat的session存储位置指向了Redis

    RedisSessionManager继承了org.apache.catalina.session.ManagerBase并重写了add、findSession、createEmptySession、remove等方法,并将对session的增删改查操作指向了对Redis数据存储的操作

    有兴趣可参考一篇Tomcat中session的管理机制:http://www.cnblogs.com/interdrp/p/4935614.html

    参考网址:http://blog.csdn.net/xlgen157387/article/details/52024139/

  • 相关阅读:
    SqlServer中插入无时间的日期
    IEnumerable的扩展方法
    JQuery插件之Autocomplete
    Visual Studio2010 即时生成序列图
    SQLSERVER系统表应用之基于Table生成存储过程参数列表
    格式化代码之自动加Region
    SQLSERVER2008使用CTE转换string到Table
    SQLSERVER使用CLR Stored Procedure导出数据到Excel
    SQLSERVER中找出拙劣的约束,索引,外键
    SQLSERVER2008中CTE的Split与CLR的性能比较
  • 原文地址:https://www.cnblogs.com/liuyifan/p/7000407.html
Copyright © 2011-2022 走看看