使用Tomcat+Redis来实现集群部署中的Session共享问题
一、工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案:
1、使用数据库来存储Session
2、使用Cookie来存储Session
3、使用Redis来存储Sesssion
二、本文中主要讲一下第3种方案,也就是使用Redis来存储Session,Github中已经有该开源组件(tomcat-redis-session-manager),下面讲一下配置的步骤
1、配置tomcat配置文件context.xml
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost" <!-- Redis地址 -->
port="6379" <!-- Redis端口 -->
password="123456" <!-- Redis密码 -->
database="0" <!-- 存储Session的Redis库编号 -->
maxInactiveInterval="60" <!-- Session失效的间隔(秒) -->
/>
注:
1)Manager节点中的className属性为必选项,其它均为可选项
2)maxInactiveInterval设置不生效,暂时找不到原因,在部署中发现Session失效的间隔一直都是读取tomcat/conf/web.xml中的session-config节点中配置的session-timeout属性值,且都是以秒为单位(如有知道问题原因所在的,麻烦告诉我一声,非常感谢)
2、添加相关的jar包到tomcat/lib目录下,需要的jar包如下:
commons-pool2-2.2.jar
jedis-2.5.2.jar
tomcat-redis-session-manage-tomcat7.jar
 
注:
1)我将这些jar包上传到了百度云盘中,有需要的可以点击下载:http://pan.baidu.com/s/1bokMOVH
3、在nginx中配置负载均衡,配置文件为nginx.conf
http {
upstream myServer {
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
server {
listen 80;
server_name www.kolbe.cn;
location / {
proxy_pass http://myServer;
}
}
配置完后,访问www.kolbe.cn的请求都将被转发到192.168.1.2:8080以及192.168.1.3:8080中去,可以在页面中打印一下Session Id验证一下
Session Id : <%= request.getSession().getId() %>
当然,也可以到Redis库中直接查看
注:
1)GitHub中该开源组件(tomcat-redis-session-manager)的主页:https://github.com/jcoleman/tomcat-redis-session-manager
2)该组件目前不支持Tomcat8,我用的是Tomcat 7.0.68版本
3)在程序中将对象放到Redis里时,该对象必须实现java.io.Serializable接口,否则将报错,如果对象中有其它对象的引用,该引用对象也需实现java.io.Serializable接口,所以在使用request.getSession().setAttribute()方法时,一定要注意一下这一个细节
使用Tomcat+Redis来实现集群部署中的Session共享问题的更多相关文章
- 使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享
		
一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储Session 2.使用Cookie来存储Session 3.使用Redis ...
 - nginx+php负载均衡集群环境中的session共享方案梳理
		
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...
 - 基于Tomcat的Solr3.5集群部署
		
基于Tomcat的Solr3.5集群部署 一.准备工作 1.1 保证SOLR库文件版本相同 保证SOLR的lib文件版本,slf4j-log4j12-1.6.1.jar slf4j-jdk14-1.6 ...
 - redis多机集群部署文档
		
redis多机集群部署文档(centos6.2) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下 ...
 - 面试连环炮系列(二):你们的项目Redis做了集群部署吗
		
你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署. 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案 ...
 - Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享
		
Nginx+Tomcat+Redis实现负载均衡.资源分离.session共享 CentOS安装Nginx http://centoscn.com/CentosServer/www/2013/0910 ...
 - redis入门与集群部署
		
redis入门 redis入门级教程非常多,如http://www.runoob.com/redis/redis-backup.html,作为入门其实已经十分详细了,主要学习内容有如下几个方面吧 1. ...
 - 【Redis学习专题】- Redis主从+哨兵集群部署
		
集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...
 - tomcat+nginx+redis集群搭建并解决session共享问题。
		
1 集群搭建 https://www.cnblogs.com/yjq520/p/7685941.html 2 session共享 https://blog.csdn.net/tuesdayma/art ...
 
随机推荐
- Django进阶Model篇008 - 使用原生sql
			
注意:使用原生sql的方式主要目的是解决一些很复杂的sql不能用ORM的方式写出的问题. 一.extra:结果集修改器-一种提供额外查询参数的机制 二.执行原始sql并返回模型实例 三.直接执行自定义 ...
 - Dubbo定义及其作用
			
Dubbo定义 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只 ...
 - Pro C/C++环境搭建
			
一. 安装oracle软件或者oracle客户端. 二. 载入orasql10.lib (1)在连接器->常规->附件库目录中,加入orasql10.lib库所在目录. (2)在连接器-& ...
 - QT延时方法
			
(转自:http://blog.sina.com.cn/s/blog_613cfe940100kacm.html) 1. void sleep(unsigned int msec){ QTime ...
 - 【PAT-L2-020】功夫传人
			
链接:https://www.patest.cn/contests/gplt/L2-020 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟 ...
 - LeetCode OJ:Remove Nth Node From End of List(倒序移除List中的元素)
			
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
 - JAVA并发全景图1.1版本
			
感谢微信群"Spring Boot那些事"兄弟们的热心整理和总结
 - [置顶]
        Android 关于BottomDialogSheet 与Layout擦出爱的火花?
			
今天上班做那个类似于ios拍照的那种效果图 就是个垂直布局然后里面textview+分割线+textview+button 当然也可以用button+分割线+button 方法有很多,选择适合自己的就 ...
 - MySQL 的中文乱码问题终结
			
中文正确 1:保存sql脚本文件 utf8 !!!!! ANSI<-->GBK 2:打开mysql窗口 SET NAMES UTF8; 每次新打开窗口执行指令 3:SOURCE d:/1. ...
 - Asphyre Sphinx is a cross-platform framework for developing 2D/3D video games and interactive business applications
			
Introduction Introduction Asphyre Sphinx is a cross-platform framework for developing 2D/3D video ga ...