redis + Tomcat 8 的session共享解决
2017-05-25 00:00
148 查看
如果英文不错的看,建议直接看官网吧,官网写的挺清楚。下面的内容是转载的一篇文章,自己补充了一些,供大家参考,也欢迎大家一起讨论
官方截止到2015-10-12前是不支持Tomcat8的,详情见官网:https://github.com/jcoleman/tomcat-redis-session-manager
锐洋智能修改的支持Tomcat8的reyo.redis.session.manager.tomcat8
修改的源代码:RedisSessionManager.java
@SuppressWarnings("deprecation")
privatevoidinitializeSerializer()throwsClassNotFoundException,IllegalAccessException,InstantiationException{
log.info("Attemptingtouseserializer:"+serializationStrategyClass);
serializer=(Serializer)Class.forName(serializationStrategyClass).newInstance();
Loaderloader=null;
if(getContainer()!=null){
loader=getContainer().getLoader();
}
ClassLoaderclassLoader=null;
if(loader!=null){
classLoader=loader.getClassLoader();
}
serializer.setClassLoader(classLoader);
}
修改后的内容
privatevoidinitializeSerializer()throwsClassNotFoundException,IllegalAccessException,InstantiationException{
log.info("Attemptingtouseserializer:"+serializationStrategyClass);
serializer=(Serializer)Class.forName(serializationStrategyClass).newInstance();
Loaderloader=null;
Contextcontext=this.getContext();
if(context!=null){
loader=context.getLoader();
}
ClassLoaderclassLoader=null;
if(loader!=null){
classLoader=loader.getClassLoader();
}
serializer.setClassLoader(classLoader);
}
前提:你已经部署了Redis,尚未学会的略过
其实很简单,就几个步骤:
1.配置Tomcat的conf目录下的context.xml文件:
1>单点Reids配置
2>Sentinel集群配置:
<!--Sentinel配置-->
<ValveclassName="reyo.redis.session.manager.tomcat8.RedisSessionHandlerValve"/>
<ManagerclassName="reyo.redis.session.manager.tomcat8.RedisSessionManager"
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382"/>
2.添加jar
3.测试
1>
存储Session:
2>重启Tomcat:假如Session保存在tomcat下,重启后Session不存在;如果保存在Redis下,Tomcat重启对Session无影响
3>取出Session:
注意事项:从Tomcat6开始默认开启了Session持久化设置,测试时可以关闭本地Session持久化,其实也很简单,在Tomcat的conf目录下的context.xml文件中,取消注释下面那段配置即可:
需要注意的是:
web.xml中的配置是有效的,即使是context.xml总配置maxInactiveInterval默认60秒,只要web.xml中的sessionConfig配置30分钟,则session的失效时间还是30分钟。
运行效果图:
一:redis主从服务器
二:redisSentinel集群(三台)
三:tomcat8.x集群(两台)
Sentinel集群下的tomcat...
四:nginx作为前端服务器
五:网站运行效果图:
官方截止到2015-10-12前是不支持Tomcat8的,详情见官网:https://github.com/jcoleman/tomcat-redis-session-manager
锐洋智能修改的支持Tomcat8的reyo.redis.session.manager.tomcat8
修改的源代码:RedisSessionManager.java
@SuppressWarnings("deprecation")
privatevoidinitializeSerializer()throwsClassNotFoundException,IllegalAccessException,InstantiationException{
log.info("Attemptingtouseserializer:"+serializationStrategyClass);
serializer=(Serializer)Class.forName(serializationStrategyClass).newInstance();
Loaderloader=null;
if(getContainer()!=null){
loader=getContainer().getLoader();
}
ClassLoaderclassLoader=null;
if(loader!=null){
classLoader=loader.getClassLoader();
}
serializer.setClassLoader(classLoader);
}
修改后的内容
privatevoidinitializeSerializer()throwsClassNotFoundException,IllegalAccessException,InstantiationException{
log.info("Attemptingtouseserializer:"+serializationStrategyClass);
serializer=(Serializer)Class.forName(serializationStrategyClass).newInstance();
Loaderloader=null;
Contextcontext=this.getContext();
if(context!=null){
loader=context.getLoader();
}
ClassLoaderclassLoader=null;
if(loader!=null){
classLoader=loader.getClassLoader();
}
serializer.setClassLoader(classLoader);
}
前提:你已经部署了Redis,尚未学会的略过
其实很简单,就几个步骤:
1.配置Tomcat的conf目录下的context.xml文件:
1>单点Reids配置
<ValveclassName="reyo.redis.session.manager.tomcat8.RedisSessionHandlerValve"/> <ManagerclassName="reyo.redis.session.manager.tomcat8.RedisSessionManager" host="localhost" port="6379" database="0" password="reyo" maxInactiveInterval="60"/> |
<!--Sentinel配置-->
<ValveclassName="reyo.redis.session.manager.tomcat8.RedisSessionHandlerValve"/>
<ManagerclassName="reyo.redis.session.manager.tomcat8.RedisSessionManager"
maxInactiveInterval="60"
sentinelMaster="mymaster"
sentinels="127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381,127.0.0.1:26382"/>
2.添加jar
3.测试
1>
存储Session:
3>取出Session:
web.xml中的配置是有效的,即使是context.xml总配置maxInactiveInterval默认60秒,只要web.xml中的sessionConfig配置30分钟,则session的失效时间还是30分钟。
运行效果图:
一:redis主从服务器
二:redisSentinel集群(三台)
三:tomcat8.x集群(两台)
Sentinel集群下的tomcat...
四:nginx作为前端服务器
五:网站运行效果图:
相关文章推荐
- redis + Tomcat 8 的session共享解决
- redis + Tomcat 8 的session共享解决
- redis + Tomcat 8 的session共享解决
- 使用redis集群+tomcat缓存共享下session丢失问题产生原因以及解决
- Redis解决Tomcat共享Session
- nginx+tomcat+redis(session共享)实现负载均衡,动静分离
- 基于nginx+redis+tomcat 实现session 共享
- tomcat+nginx 分布式集群 redis实现session共享
- nginx+tomcat+redis完成session共享(转载)
- Tomcat+Nginx+Redis实现均衡负载实现session共享
- VIRGO TOMCAT SERVER +REDIS SESSION 共享 实现
- Linux(CentOS)下Nginx+Tomcat集群+Redis共享Session搭建
- nginx+tomcat+redis 做负载均衡时session 共享实现
- Nginx+tomcat+redis集群共享session实现负载均衡
- 分布式集群Session共享 简单多tomcat8+redis的session共享实现
- [转载] tomcat集群基于redis共享session解决方案
- spring boot学习5之session+redis解决session共享问题
- tomcat+nginx+redis实现均衡负载、session共享(二)