环境: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包的源码)