session共享之redis
介绍
nginx在解决session的时候有好几种方案
- ip_hash
- 存放redis
- session换coolie
- 单独设置一个session服务器
- tomcat自带的cluster方式
考虑到目前自己所工作的项目中,有以下特性
经常停服务
需要多台服务器分担压力
项目从统一用户(SSO)进行单点登录
redis可以进行推上去
单点登录中的token是实时的,仅仅用来登录时候双方校验,校验过后就不在使用,也没有提供接口进行二次校验token的正确性。
测试环境中由于redis已经搭建,但是由于种种原因为上线,正好借此机会进行推上去。
根据上述情况,决定采用redis进行存储session,保证session共享。
在写博客之前,博主在开发的测试环境进行试验,最后实现了该功能。
使用redis的话现在需要 tomcat-redis-session-manager.jar包,目前该链接仅仅支持到tomcat7,点击链接进行下载 tomcat-redis-session-manager
编译
通过上面下载的内容,但是上面没有jar包,此时需要我们进行编辑为jar包。
编译工具使用的为gradle,类似于maven的一样就行配置环境变量。
首先解压后,修改其中的build.gradle文件,修改后内容如下:
1 | apply plugin: 'java' |
然后我们可以更改java与依赖包的版本,上述为本人编译成功后的文件,大家可以直接进行复制替换。
在tomcat-redis-session-manager-1.2-tomcat-7下进行编译,命令为
1 | gradle build |
编译后在build /lib 下会生成jar包 tomcat-redis-session-manager-master-2.0.0.jar
注意:上述依赖的包一定要与我们实际的tomcat版本一直,jdk版本一直,而且上面用到的包的版本,会在下面配置中进行使用。
配置
首先说明需要的包:
- tomcat-redis-session-manager-master-2.0.0.jar
- jedis-2.8.1.jar
- commons-pool2-2.2.jar
操作步骤(每台服务器都要进行操作)
将上述的包放在tomcat目录下的lib中
保证上述包与编译包的版本一致
修改context配置文件(tomcat下conf目录中的context.xml)
1
2
3
4
5
6<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="192.168.2.163"
port="6379"
database="0"
maxInactiveInterval="60" />其中要保证value与manager标签中的className保持一致(可以解压jar包,得到路径)
分别启动tomcat
博主是在两台服务器上进行搭建的,此时要进行启动,并正常访问(此时nginx为启动)
开启nginx并访问
启动nginx,可以参考上篇博客,结果如下图





tomcat中session同步
在有些时候我们需要进行用tomcat自带的session同步,比较简答以及不需要redis;
介绍 Cluster
tomcat自带的session同步是根据组播的形式的,大家加入一个组来进行实现session同步。
当时由于是内网环境进行搭建,在上述为成功的刺激下尝试使用这种方式,很遗憾,家里在tomcat8的基础上进行搭建起来了,但是tomcat7未成功。下面讲的是在tomct8的基础上进行的。
配置 Cluster
此时与上述redis实现redis共享不一致,此时修改的conf下的server.xml,直接上代码,在
1 | <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" |
上面的代码要在两个tomcat上进行添加
此时在项目中的web.xml上增加标签
1 | <distributable/> |
启动中看到部分日志:
1 | 10-Jul-2019 08:16:01.090 INFO [main] org.apache.catalina.ha.tcp.SimpleTcpCluster.startInternal Cluster is about to start |
另外一台启动日志
1 | 10-Jul-2019 08:19:32.360 INFO [main] org.apache.catalina.ha.tcp.SimpleTcpCluster.startInternal Cluster is about to start |




上述用到的页面代码如下:
1 | <%@ page contentType="text/html; charset=UTF-8" %> |