首先我们需要知道什么是session共享,共享session的目的是什么。
我们知道,session是一次浏览器和服务器的交互的会话,当一个浏览器和服务器连接之后就会产生一个会话。
当我们进行tomcat集群的时候,会遇到这样的问题,我们第一次请求分发到第一台服务器下的服务,第二次请求可能会被分发到另一台服务器下的服务。
这样就会产生两个会话,我们获取到的sessionid值是不一样的,此时我们两台服务器通过session获取到的一些值也不一样,这样就无法满足我们的业务需求。
那有什么办法解决呢?下边就讲下通过tomcat的sessionmanager配合redis的方法存储session,达到多个tomcat的session共享。
1、首先安装好redis环境
可参考之前我写的两篇文章:
http://blog.csdn.net/tjcyjd/article/details/40738163
http://blog.csdn.net/tjcyjd/article/details/51488054
2、配置好jdk环境和安装tomcat环境。
3、配置session共享。
redis实现方法:
打开tomcat目录conf下的context.xml配置文件
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60"/>
memcached实现方法:
参考网址:http://code.google.com/p/memcached-session-manager/
修改 tomcat 的 conf 目录下的context.xml 文件:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211n2:localhost:11212"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false" />;
以上版本为 1.3 ,需要以下jar 包:
memcached-session-manager-1.3.0.jar
msm-javolution-serializer-1.3.0.jar
javolution-5.4.3.1.jar
memcached-2.4.2.jar
The end!