1. 持久化Tomcat Session到Redis中
Tomcat提供了一个开放的session管理和持久化的org.apache.catalina.session.ManagerBase
,继承这个抽象类并做一些简单的配置,即可让你的session管理类接管Tomcat的session读取和持久化。当然,我们在这里使用了一个流行的开源项目:
https://github.com/jcoleman/tomcat-redis-session-manager
,它已经为我们准备好了这样的一个管理类,只要将这个管理类配置在Tomcat中即可发挥功能。它可以帮助我们将tomcat的session存入我们指定的redis,甚至支持redis在sentinel模式调度的redis集群,稍后我们也将详述这样的redis集群该如何部署。
使用这个项目非常简单,如果在Tomcat6或Tomcat7下部署,直接使用项目release出的jar文件到Tomcat的lib
下即可,准确来说还需要引入它的其他几个依赖(括号中为建议的):
tomcat-redis-session-manager-VERSION.jar(v1.2)
commons-pool2-VERSION.jar(v2.2)
jedis-VERSION.jar(v2.5.2)
引入后需要在tomcat下修改conf/context.xml
:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="{redis.host}"
port="{redis.port}"
database="{redis.dbnum}"
maxInactiveInterval="60"/>
这样一来我们的tomcat即可把session的管理交由我们配置的redis来处理。
需要注意的是,如果在Tomcat8下按照上述部署,会在启动时报错,笔者查看过原因,是tomcat-redis-session-manager
最后更新的年代相隔较久,代码中使用的Tomcat api出现了过时删去的情况,在Tomcat8下会出现问题,如果想在Tomcat8下使用,需要自行对过时的api进行修改,替换成新的Tomcat api。笔者自己修改了未经严格验证的一个版本,可供使用Tomcat8的读者试用:https://gitee.com/diaodiaofly/tomcat-redis-session-manager