使用开源插件tomcat-redis-session-manager实现session共享

638 阅读2分钟

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

tomcat-redis-session-manager介绍

tomcat-redis-session-manager是一个开源项目

地址: tomcat-redis-session-manager

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

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

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

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

该项目同时支持Tomcat 6和Tomcat7。
在这里插入图片描述
当前不支持Tomcat 8,也没有进行任何测试或开发
在这里插入图片描述
在这里插入图片描述

具体做法

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

GitHub上有人发布了对Tomcat8的支持
在这里插入图片描述
在这里插入图片描述

1.编辑tomcat/conf/context.xml文件
在这里插入图片描述
2.在<Context>节点下进行如下配置:

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

在这里插入图片描述
3.Maven仓库下载上面简介中提及的两个jar包

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

在这里插入图片描述
4.基于maven提供的项目模板快速创建一个web项目。
在这里插入图片描述

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>

在这里插入图片描述
6.tomcat启动信息配置
在这里插入图片描述
在这里插入图片描述
7.验证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述