用redis实现tomcat集群下的session共享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用redis实现tomcat集群下的session共享相关的知识,希望对你有一定的参考价值。

上篇实现了 LINUX中NGINX反向代理下的TOMCAT集群(http://www.cnblogs.com/yuanjava/p/6850764.html

这次我们在上篇的基础上实现session 共享问题

nginx机器:192.168.1.108

两台tomcat机器分别是:192.168.1.168

                               192.168.1.178

 

一:测试session共享问题

在原index.jsp页面添加如下代码

 

SessionId:<%= session.getId() %>
<% String username =(String)session.getAttribute("username");
if(!"".equals(username)&& username!=null){
out.print("------username is "+session.getAttribute("username"));
} else {
out.print("------start username is null");
session.setAttribute("username", "lxs");
out.print("------now username is "+session.getAttribute("username"));

}

%>

 

技术分享

 

 

此时,通过nginx 访问时 第一次访问的是 178那台机器 

技术分享

再次刷新时,访问了168那台机器

技术分享

可以看出,此时 session 是不共享的,在集群下,分别创建了session

 

二:用redis实现 session 共享

   实现  session 共享的方法有很多种,此次用的是把session存在 redis 中实现共享。

  1.安装redis (如何安装请看http://www.cnblogs.com/yuanjava/p/6793251.html)

redis也是安装在192.168.1.108,跟Nginx安装在同一台机器了

  2.把需要的jar包分别拷贝到 两个tomcat 的lib目录下

技术分享

 

3. 修改 context.xml 里的内容

分别在tomcat/conf/context.xml里添加如下内容

 

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />        

<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"

    host="192.168.1.108"           

    port="6379"                 

    database="0"                 

    maxInactiveInterval="60" />

 

其中className 是固定的,取得是 jar包里的实现的类

host 是redis 的主机名  port是redis端口  database 是把session存放在redis的第几个库里,maxInactiveInterval表示session存活时间

技术分享

 

 

 4.再次测试session共享

经过前三步,已经实现了redis下的session共享问题,再次测试

分别启动redis,nginx,以及tomcat 再次访问http://192.168.1.108:7777/nginxTest/

此时nginx 首先转发到178那台机器,此时,session里的 username是为空的,然后往

username里存放了一个值,然后打印出了值

 技术分享

 

再次访问http://192.168.1.108:7777/nginxTest/,此时nginx 转到了168那台机器

此时 sessionid 跟178的一样。同时username 也是有值的,直接打印出了 值

技术分享

 

这说明了 此时session 是共享的,同时在redis里也存进去了对应session

技术分享

 












以上是关于用redis实现tomcat集群下的session共享的主要内容,如果未能解决你的问题,请参考以下文章

Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

Tomcat集群通过redis实现session共享

redis实现tomcat集群session共享

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

Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建

使用Redis存储Nginx+Tomcat负载均衡集群的Session