Tomcat+Redis实现session共享

简介

本文将介绍tomcat7、tomcat8、spring多种方式如何实现单台redis和集群redis如何配置session共享(其中tomcat8只能实现单台redis共享)

第一步:环境准备

1、所需lib包如下:

      tomcat7依赖包如下:

      tomcat8依赖包如下:

2、测试war包如下:

3、Tomcat如下:

第二步:Tomcat8配置方式实现session共享


1、====tomcat conf/context.xml    <Context>标签下====

<!-- com.orangefunction.tomcat.redissessions 是自定义maven项目的报名路径,切需要与maven 中 RedisSessionManager的serializationStrategyClass值一致 --> 

<!-- 单台redis session 共享配置,已验证(如果redis没有设置密码,需将password一行去掉)--> 

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

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

host="127.0.0.1" 

port="6379" 

database="0" 

password="123456" 

maxInactiveInterval="60" /> 

<!-- 集群redis session 共享配置,未验证 --> 

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

<Manager className="com.orangefunction.tomcat.redissessions.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、将lib包和war包分别拷贝至至少两个tomcat的lib和webapps目录

3、启动tomcat,浏览器访问Nginx负载均衡地址:http://10.100.160.135/my_project/indexServlet,观察返回的session值是否一致

第三步:Tomcat7配置方式实现session共享

1、====tomcat conf/context.xml    <Context>标签下====

<!-- com.orangefunction.tomcat.redissessions 是自定义maven项目的报名路径,切需要与maven 中 RedisSessionManager的serializationStrategyClass值一致 --> 

<!-- 单台redis session 共享配置,已验证(如果redis没有设置密码,需将password一行去掉)--> 

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/> 
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
redisNodes="10.100.160.132:6379" 
timeout="300000" 
maxRedirections="6" 
maxWaitMillis="-1" 
maxTotal="1000" 
minIdle="8" 
maxIdle="100" 
maxInactiveInterval="60"/>

<!-- 集群redis session 共享配置,已验证 --> 

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/> 
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
redisNodes="10.100.160.132:7001,10.100.160.132:7002,10.100.160.133:7003,10.100.160.133:7004,10.100.160.134:7005,10.100.160.134:7006" 
timeout="300000" 
maxRedirections="6" 
maxWaitMillis="-1" 
maxTotal="1000" 
minIdle="8" 
maxIdle="100" 
maxInactiveInterval="60"/>

2、将lib包和war包分别拷贝至至少两个tomcat的lib和webapps目录

3、启动tomcat,浏览器访问Nginx负载均衡地址:http://10.100.160.135/my_project/indexServlet,观察返回的session值是否一致

第三步: spring-session-data-redis实现session共享

源码:ssm_source.rar

补丁:ssm.war

直接降war包发布至tomcat,conf/content.xml无需任何修改

启动tomcat,浏览器访问Nginx负载均衡地址:http://10.100.160.135/my_project/indexServlet,观察返回的session值是否一致

问题总结

1、要存入session的对象必须实现序列化,否知会出现序列化错误

public class Test implements Serializable { 

  private static final long serialVersionUID = 5021582410009851677L;

......

}

2、待续


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章