使用tomcat-redis-session-manager实现session共享

  • tomcat-redis-session-manager介绍
  • 具体做法


tomcat-redis-session-manager介绍

tomcat-redis-session-manager是一个开源项目。地址:https://github.com/jcoleman/tomcat-redis-session-manager

会话管理器的实现,用于将会话存储在Redis中,以便在Tomcat服务器群集之间轻松分配请求。会话被实现为非粘性的-也就是说,每个请求都可以发送到集群中的任何服务器(与Apache提供的Tomcat集群设置不同)

会话在创建后立即存储到Redis中,以供其他服务器使用。会话是根据Redis的请求直接加载的(但是在同一请求上下文中对会话的后续请求将返回ThreadLocal缓存,而不是多次访问Redis。)为了尽可能避免冲突(和丢失的写操作),会话数据如果会话已修改,则仅在Redis中更新

管理器依靠Redis的本机到期功能来使密钥自动过期,从而避免了不断在整个会话列表中搜索过期会话的开销

会话中存储的数据必须可序列化

该项目同时支持Tomcat 6和Tomcat7。

redission使用详解 redissessionmanager_redis


当前不支持Tomcat 8,也没有进行任何测试或开发

redission使用详解 redissessionmanager_tomcat_02


redission使用详解 redissessionmanager_redission使用详解_03

具体做法

该项目仅支持tomcat6和tomcat7,对于tomcat8不支持,但可以通过二次开发实现tomcat8的支持.

GitHub上有人发布了对Tomcat8的支持

redission使用详解 redissessionmanager_redission使用详解_04


redission使用详解 redissessionmanager_redis_05

1.编辑tomcat/conf/context.xml文件

redission使用详解 redissessionmanager_redis_06


2.在<Context>节点下进行如下配置:

注意:
className一定得对应类所在的位置!包结构不同此处必然不同.
若redis有配置密码则使用下面注释配置
<Valve className="com.*.*.RedisSessionHandlerValve"/> 
<Manager className="com.*.*.RedisSessionManager" 
		  host="localhost"
		  port="6379"
		  database="0" 
		  password="123"
		  maxInactiveInterval="60" />

redission使用详解 redissessionmanager_redission使用详解_07


3.Maven仓库下载上面简介中提及的两个jar包

将下载的两个jar包与对tomcat8支持的jar放到tomcat/lib目录中

redission使用详解 redissessionmanager_redission使用详解_08


4.基于maven提供的项目模板快速创建一个web项目。

redission使用详解 redissessionmanager_分布式_09

5.修改默认的index.jsp页面,以供区别session共享是否生效.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Tomcat1</title>
</head>
<body>
SessionID:<%=session.getId()%>
<br>
SessionIP:<%=request.getServerName()%>
<br>
SessionPort:<%=request.getServerPort()%>
</body>
</html>

redission使用详解 redissessionmanager_tomcat_10


6.tomcat启动信息配置

redission使用详解 redissessionmanager_redis_11


redission使用详解 redissessionmanager_redis_12


7.验证

redission使用详解 redissessionmanager_redission使用详解_13


redission使用详解 redissessionmanager_分布式_14


redission使用详解 redissessionmanager_tomcat_15