redis + Tomcat 8 的session共享解决
如果英文不错的看,建议直接看官网吧,官网写的挺清楚。下面的内容是转载的一篇文章,自己补充了一些,供大家参考,也欢迎大家一起讨论
官方截止到2015-10-12前是不支持Tomcat8的,详情见官网:https://github.com/jcoleman/tomcat-redis-session-manager
锐洋智能修改的支持Tomcat8的 reyo.redis.session.manager.tomcat8

修改的源代码:RedisSessionManager.java
@SuppressWarnings("deprecation")
private void initializeSerializer() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
log.info("Attempting to use serializer :" + serializationStrategyClass);
serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();
Loader loader = null;
if (getContainer() != null) {
loader = getContainer().getLoader();
}
ClassLoader classLoader = null;
if (loader != null) {
classLoader = loader.getClassLoader();
}
serializer.setClassLoader(classLoader);
}
修改后的内容
private void initializeSerializer() throws ClassNotFoundException, IllegalAccessException, InstantiationException {
log.info("Attempting to use serializer :" + serializationStrategyClass);
serializer = (Serializer) Class.forName(serializationStrategyClass).newInstance();
Loader loader = null;
Context context = this.getContext();
if (context != null) {
loader = context.getLoader();
}
ClassLoader classLoader = null;
if (loader != null) {
classLoader = loader.getClassLoader();
}
serializer.setClassLoader(classLoader);
}
前提:你已经部署了Redis,尚未学会的略过
其实很简单,就几个步骤:
1.配置Tomcat的conf目录下的context.xml文件:
1> 单点Reids配置
|
<Valve className="reyo.redis.session.manager.tomcat8.RedisSessionHandlerValve" />
<Manager className="reyo.redis.session.manager.tomcat8.RedisSessionManager" host="localhost" port="6379" database="0" password="reyo" maxInactiveInterval="60"/> |
2> Sentinel集群配置:
<!-- Sentinel 配置 -->
<Valve className="reyo.redis.session.manager.tomcat8.RedisSessionHandlerValve" />
<Manager className="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:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("hello"); //取得Session对象 HttpSession session=request.getSession(); //设置Session属性 for(int i=0;i<100000;i++){ session.setAttribute("name"+i, "Magci_"+i); } } |
2>重启Tomcat:假如Session保存在tomcat下,重启后Session不存在;如果保存在Redis下,Tomcat重启对Session无影响
3>取出Session:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("hello"); HttpSession session=request.getSession(); //取出Session属性 for(int i=0;i<100000;i++){ System.out.println(session.getAttribute("name"+i)); } } |
注意事项:从Tomcat6开始默认开启了Session持久化设置,测试时可以关闭本地Session持久化,其实也很简单,在Tomcat的conf目录下的context.xml文件中,取消注释下面那段配置即可:
<!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> |
需要注意的是:
web.xml中的配置是有效的,即使是context.xml总配置maxInactiveInterval默认60秒,只要web.xml中的sessionConfig配置30分钟,则session的失效时间还是30分钟。
运行效果图:
一:redis主从服务器

二:redis Sentinel集群(三台)



三:tomcat8.x 集群(两台)

Sentinel集群下的tomcat...

四:nginx作为前端服务器

五:网站运行效果图:

实例测试地址:http://sms.reyo.cn
用户名:aa 密码:123456
redis + Tomcat 8 的session共享解决的更多相关文章
- Shiro+Redis实现tomcat集群session共享
一.背景 当我们使用了nginx做项目集群以后,就会出现一个很严重的问题亟待解决,那就是:tomcat集群之间如何实现session共享的问题,如果这个问题不解决,就会出现登陆过后再次请求资源依旧 ...
- nginx+tomcat+redis的集群+session共享
nginx+tomcat+redis的集群+session共享 环境准备 1.tomcat版本:tomcat7 tomcat下载及安装,目前很多好的资源和步骤,此处省略. 2.jdk版本:jdk1.7 ...
- nginx+tomcat+redis负载均衡及session共享
概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...
- JEECG & JEESite Tomcat集群 Session共享
多台tomcat服务的session共享 memcached与redis - JEECG开源社区 - CSDN博客https://blog.csdn.net/zhangdaiscott/article ...
- net core+Redis+IIS+nginx实现Session共享
.Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享 前言:虽说公司app后端使用的是.net core+Redis+docker+ ...
- 【Tomcat】Tomcat + Memcached 实现session共享
概述 web项目中,Tomcat的访问量总是有限的,这时候就需要用到Tomcat集群,多个Tomcat的时候就要考虑Session共享的问题,这里介绍一种使用Memcached做Session共享的解 ...
- Nginx+Tomcat集群+session共享
Nginx+Tomcat集群+session共享 1)安装Nginx 2)配置多个Tomcat,在server.xml中修改端口(端口不出现冲突即可) 3)在nginx.conf文件中配置负载均衡池, ...
- Nginx+Tomcat+Memcache 实现session共享
Nginx + Tomcat + Memcache 实现session共享 1. Nginx 部署 1.上传源码包到服务器,解压安装 下载地址:http://nginx.org/en/download ...
- 分布式Session共享(二):tomcat+memcached实现session共享
一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...
随机推荐
- TcxGrid 标题头高度
- phpMyAdmin setup.php脚本的任意PHP代码注入漏洞
phpMyAdmin (/scripts/setup.php) PHP 注入代码 此漏洞代码在以下环境测试通过: phpMyAdmin 2.11.4, 2.11.9.3, 2.11.9.4, ...
- springboot 解决 woff2、ttf 跨域无法解析问题
@Configuration public class CORSConfiguration extends WebMvcConfigurerAdapter { @Override public voi ...
- Flutter与Dart 入门
Flutter简介 Flutter是google推出的,一个使用Dart语言开发的跨平台移动UI框架,通过自建绘制引擎,能高性能.高保真地进行Android和IOS开发. Flutter是什么 Flu ...
- vue-simple-uploader上传插件
基于vue-simple-uploader封装文件分片上传.秒传及断点续传的全局上传插件 https://www.cnblogs.com/xiahj/p/vue-simple-uploader.htm ...
- Codeforces Round #530 (Div. 2) F - Cookies
F - Cookies 思路:我们先考虑如何算出在每个节点结束最多能吃多少饼干, 这个dfs的时候用线段树维护一下就好了, 然后有个这个信息之后树上小dp一下就好啦. #include<bits ...
- 黑马程序员_java基础笔记(13)...类加载器和代理
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,类加载器.2,代理. 1,类加载器. Java虚拟机中可以安装多个类加载器,系 ...
- 005 RequestMapping_HiddenHttpMethodFilter 过滤器
很郁闷,这个查了很多资料,就是put与delete还是不好用. 但是看了一个文档后解决了,有些感谢这篇文档:http://blog.csdn.net/tiberroot/article/details ...
- EntityFramework笔记
参照文档:http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent.html 案例:http://pan.baidu.com/s/1c1Qgg28 ...
- Android-RemoteView-桌面小部件
Android-RemoteView-桌面小部件 学习自 <Android开发艺术探索> https://developer.android.google.cn/guide/topics/ ...