基于redis的Tomcat服务器session共享(单实例redis)

来源:互联网 发布:剑雨江湖进阶12数据 编辑:程序博客网 时间:2024/06/08 07:35

环境:tomcat7,redis3.2.10

关于redis的安装以及配置请自行搜索。


在每个tomcat实例中都需要做如下修改。

需要的jar:

1.jedis-2.2.1.jar

2.commons-pool2-2.4.2.jar

3.redis-session-manager.jar(这个jar名称是自定义的)

*关于这个jar请移步github,获取源码自行编译,此处作者是用gradle构建,需要在OS安装gradle。或者修改成其它构建工具。

将以上jar添加到tomcat目录下的 /lib文件夹中

2.需要做的修改。

修改conf/context.xml文件,添加和修改如下内容:

   <!-- 这里是禁用session本地持久化-->
    <Manager pathname="" />  

 <!-- 这个类是在redis-session-manager.jar这个包中 -->
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />   

<!-- 这个类是在redis-session-manager.jar这个包中,下面的属性需要大家自行修改,host默认localhost,port默认6379 ,database默认0,maxInactiveInterval默认30*60单位是秒-,password默认是null,有密码请自行添加,->
<Manager className="com.radiadesign.catalina.session.RedisSessionManager" 
    host="192.168.50.129" 
    port="6379" 
    database="0" 
    password="abc123" 
    maxInactiveInterval="60"/>

注意:maxInactiveInterval这个参数会根据tomcat版本的不同而失效,在7.0.68版本及以上此字段失效,应改为sessionMaxAliveTime,如果是这个字段需要修改对应的redis-session-manager中的源码,

将getMaxInactiveInterval()方法全部修改成getSessionMaxAliveTime()

另外这个session共享的jar包中jedis版本较低,无法使用ssl,如果需要使用需要在redis-session-manager.jar中自行更新jedis版本,并在jedis连接池生成处自行编码。我是给RedisSessionManager类增加了一个标志位字段,来做的,这样方便在xml文件中配置。

其中还有sessionPersistPolicies,这个字段使用来确定session持久策略,值有三种default,save_on_change,always_save_after_request,可以使用逗号分隔来指定多种会话持久策略。

以下是测试:

此测试是使用了tomcat自带的页面进行测试的,默认安装或者解压后,在webapps下面会有相应的页面;

默认的seesion失效是30*60秒,如果测试可以修改maxInactiveInterval(或者sessionMaxAliveTime)这个字段值,默认单位秒,或者修改tomcat根目录下conf/web.xml文件,如果有web项目可以在web.xml中重新配置失效时间。(如果你的项目需要动态的session失效时间的话,需要修改共享jar包的源码)



原创粉丝点击