随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

Tomcat7基于Redis的Session共享实战一

本文主要介绍如何使用redis对tomcat7的session进行托管。

1、安装Redis
redis安装比较简单,此处略过。

2、配置两个Tomcat
在本机上配置两个Tomcat,分别为tomcat7-8081、tomcat7-8082。

编制两个index.jsp页面,分别放入tomcat7-8081\webapps\ROOT、tomcat7-8082\webapps\ROOT目录下,index.jsp页面内容如下:

复制代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>获取session id</title>
</head>
<body>
    Session Id : <%= request.getSession().getId() %>
</body>
</html>
复制代码

tomcat7-8081访问地址:http://localhost:8081,浏览显示内容:Session Id : A86BC413D12339380DD7B0079C50D9EB
tomcat7-8082访问地址:http://localhost:8082,浏览显示内容:Session Id : A86BC413D12339380DD7B0079C50D9EB

备注:在同一台服务器上配置多个Tomcat教程

3、拷贝tomcat需要的jar
将如下几个jar拷贝到${TOMCAT_HOME}/lib下

tomcat-redis-session-manager-VERSION.jar 
jedis-2.5.2.jar 
commons-pool2-2.2.jar

备注:jar已上传到博客园中,有需要的点击下载

4、配置tomcat
编辑${TOMCAT_HOME}/conf/context.xml,在context中加入

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
       host="localhost"
       port="6379"
       database="0"
       maxInactiveInterval="60" />

其中host和port为redis的ip和端口

至此配置完成,tomcat会使用redis来托管session。

5、测试
分别启动2个Tomcat,在终端看到了如下信息,表明redis的session manager初始化成功。

复制代码
...
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Attached to RedisSessionHandlerValve
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Will expire sessions after 1800 seconds
十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\manag
十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deploying web application directory E:\WorkFolder\Temp\Redis-Session\apache-tomcat1-8080\webapps\ROOT
十月 15, 2015 4:52:39 下午 org.apache.catalina.startup.TldConfig execute
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a co
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Attached to RedisSessionHandlerValve
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
信息: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
十月 15, 2015 4:52:39 下午 com.radiadesign.catalina.session.RedisSessionManager startInternal
信息: Will expire sessions after 1800 seconds
...
复制代码

打开浏览器,输入http://localhost:8081回车,
打开浏览器,输入http://localhost:8082回车

获取的SESSIONID是同一个,说明成功了,其中D5E4019A04709CD68F94378211DA1B60就是SESSIONID

启动redis自身的客户端:redis-cli.exe -h 127.0.0.1 -p 6379
执行"keys *",会看到SESSIONID:D5E4019A04709CD68F94378211DA1B60;
执行"get D5E4019A04709CD68F94378211DA1B60",得到SESSIONID的值。


经测试,只要redis不重启,用户session就不会丢失。虽然session保存到了redis中,但是如果redis挂掉,session也会丢失。为了解决此问题,可对redis进行集群。
注意:放到redis中的对象必须为可序列化对象。因此,在编程过程中,放置的session对象必须实现serialiable接口。

posted on   Ruthless  阅读(11639)  评论(4编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示