一、工作中因为要使用到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()方法时,一定要注意一下这一个细节

 

最新文章

  1. 2016huasacm暑假集训训练五 J - Max Sum
  2. Nuke
  3. 用iptables 实现本地端口转发
  4. 《CODE》书摘
  5. Atitit。Web server Jetty9 使用 attilax 总结
  6. AOP动态代理解析5-cglib代理的实现
  7. Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’解决方法 + Linux启动/停止/重启Mysql数据库的方法
  8. Svn服务器的安装和配置
  9. Android Bundle类
  10. uuid-不好之处
  11. flex&amp;bison 1
  12. 模板类之间的友元关系实现Blob和BlobPtr
  13. &lt;转载&gt;无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
  14. mysql循环插入数据库中数据。
  15. 详解Tomcat 配置文件server.xml
  16. NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  17. 【强连通分量】Bzoj1194 HNOI2006 潘多拉的盒子
  18. Android 开发 框架系列 Android-Universal-Image-Loader 图片加载使用demo
  19. linux下应用程序性能剖分神器gprofiler-tools-安装和使用
  20. 每篇半小时1天入门MongoDB——1. MongoDB介绍和安装

热门文章

  1. ZC_01_获取Class对象
  2. Java动态代理的总结
  3. input type=file 怎么样调取用户手机照相机
  4. react-redux: async promise
  5. antd-iconfont for inner network
  6. 【git】新建一个git仓库的方法
  7. .NET学习路线之我见(转)
  8. WAL日志文件名称格式详解
  9. .net 系列化与反序列化(转载)
  10. Vagrant 常用命令