Loading...
Tomcat使用Redis缓存实现分布式Session共享

程序员笔记 2016/01/15 Tomcat , Redis

前置场景描述

    在两台linux服务器上分别安装Tomcat,并且部署相同的WEB应用,通过前置服务器的nginx反向代理,达到这两个Tomcat的负载均衡的目的,实现分布式部署;当发生单点故障或者临时停机,nginx会将用户当前访问的WEB应用切换到其他正常服务器到应用上,这个时候如果session不同步,则会导致用户会话超时,提示再次登录的现象,会给用户产生非常不好的体验。

所以出现了Tocmat Session共享的课题,用于解决session不同步,应用切换时会话超时的问题。

    Tomcat Session共享的实现方式有多种,例如使用memcache、mongodb、redis等,本文主要针对使用redis来实现Tomcat的Session共享。


实际操作步骤

1、访问https://github.com/jcoleman/tomcat-redis-session-manager/releases ,下载"1.2-tomcat-7-java-7.zip"并解压后将项目导入Eclipse,构建成功,并且导出“tomcat-redis-session-manager-1.2-tomcat-7.jar”


2、将如下jar包放到tomcat的lib目录下

tomcat-redis-session-manager-1.2-tomcat-7.jar

commons-pool2-2.2.jar

jedis-2.5.2.jar

tomcat-juli-7.0.27.jar


3、编辑tomcat配置文件context.xml,加入如下内容

    <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
    <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
         host="localhost" 
         port="6379" 
         database="0" 
         maxInactiveInterval="60" 
         />


这里使用的是本机默认安装的redis


4、启动tomcat并且访问应用,查看redis缓存内容如下

127.0.0.1:6379> get 33B32CE273EE4375C78B75CD8BE684DA
"\xac\xed\x00\x05sr\x00Ncn.zblink.framework.redis.session.manager.tomcat7.SessionSerializationMetadata\xdea\xb1\n\x9a\xcdn\xff\x03\x00\x01[\x00\x15sessionAttributesHasht\x00\x02[Bxpw\x14\x00\x00\x00\x10V\x1b\x96:\xe1r\x97_m'k\xbb\xca\xeb\x0e\x1axsr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01RDC\"\x02sq\x00~\x00\x03\x00\x00\x01RDC\"\x02sr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexq\x00~\x00\x04\x00\x00\a\bsr\x00\x11java.lang.Boolean\xcd r\x80\xd5\x9c\xfa\xee\x02\x00\x01Z\x00\x05valuexp\x01q\x00~\x00\nsq\x00~\x00\x03\x00\x00\x01RDC\"\x03t\x00 33B32CE273EE4375C78B75CD8BE684DAsq\x00~\x00\a\x00\x00\x00\x01t\x00\x15justForSessionTestKeyq\x00~\x00\x0ew\b\x00\x00\x01RDC\"\x02"
127.0.0.1:6379>


参考文档:

https://github.com/jcoleman/tomcat-redis-session-manager


Comments