一、工作中因为要使用到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共享问题的更多相关文章

  1. 使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享

    一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储Session 2.使用Cookie来存储Session 3.使用Redis ...

  2. nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  3. 基于Tomcat的Solr3.5集群部署

    基于Tomcat的Solr3.5集群部署 一.准备工作 1.1 保证SOLR库文件版本相同 保证SOLR的lib文件版本,slf4j-log4j12-1.6.1.jar slf4j-jdk14-1.6 ...

  4. redis多机集群部署文档

    redis多机集群部署文档(centos6.2) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下 ...

  5. 面试连环炮系列(二):你们的项目Redis做了集群部署吗

    你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署. 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案 ...

  6. Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

    Nginx+Tomcat+Redis实现负载均衡.资源分离.session共享 CentOS安装Nginx http://centoscn.com/CentosServer/www/2013/0910 ...

  7. redis入门与集群部署

    redis入门 redis入门级教程非常多,如http://www.runoob.com/redis/redis-backup.html,作为入门其实已经十分详细了,主要学习内容有如下几个方面吧 1. ...

  8. 【Redis学习专题】- Redis主从+哨兵集群部署

    集群版本: redis-4.0.14 集群节点: 节点角色 IP redis-master 10.100.8.21 redis-slave1 10.100.8.22 redis-slave2 10.1 ...

  9. tomcat+nginx+redis集群搭建并解决session共享问题。

    1 集群搭建 https://www.cnblogs.com/yjq520/p/7685941.html 2 session共享 https://blog.csdn.net/tuesdayma/art ...

随机推荐

  1. js 格式化时间日期函数小结2

    方法一: // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符,  // 年(y)可以用  ...

  2. Nessus离线安装及升级插件 转

    修改Nessus Web端口 ./nessuscli fix --set xmlrpc_listen_port=8866 最近做客户的内网主机漏洞扫描,申请了一台内网主机做扫描服务器,安装Nessus ...

  3. Angular表达式--插值字符串($interpolate)

    要在字符串模板中做插值操作,需要在你的对象中注入$interpolate服务.在下面的例子中,我们将会将它注入到一个控制器中: angular.module('myApp', []) .control ...

  4. hdu 5265

    http://acm.hdu.edu.cn/showproblem.php?pid=5256 题目不错,题面忍不住骂一句mmp.......后面说ai都是正整数,我以为修改后也必须是正整数,前面又说只 ...

  5. iOS自动化探索(五)自动化测试框架pytest - Assert断言的使用

    使用assert语句进行断言 pytest允许使用标准的python assert语法,用来校验expectation and value是否一致 代码演示: def func(): def test ...

  6. <img>边框的border属性

    默认地,图像是没有边框的(除非图像在 a 元素内部). 浏览器通常会把代表超链接的图像(例如包含在 <a> 标签中的图像)显示在两个像素宽的边框里面,以表示读者可以通过选择这个图像来访问相 ...

  7. docker 私有registry 配置

    备注:此处使用linux镜像配置仓库 registry 启动步骤 https://hub.docker.com/_/registry/ docker login docker pull registr ...

  8. LeetCode OJ:Best Time to Buy and Sell Stock II(股票买入卖出最佳实际II)

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  9. brew: Nginx https config

    下载安装Brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mas ...

  10. Linux系统下的shutdown命令用于安全的关闭/重启计算机

    Linux系统下的shutdown命令用于安全的关闭/重启计算机,它不仅可以方便的实现定时关机,还可以由用户决定关机时的相关参数.在执行shutdown命令时,系统会给每个终端(用户)发送一条屏显,提 ...