前言
集群中实现session共享,是不得不解决的问题,目前主要右三种方案
- 使用数据库来存储session
- 使用cookie来存储session
- 使用Redis来存储session
本文主要讲一下第三中方案。
准备工作
- 操作系统:windows 7/8/10
- jdk和tomcat
- Nginx 1.10
- redis 3.0(windows版本)
这里主要详细介绍一下redis在windows下面的安装过程。
redis安装运行过程
到 https://github.com/MSOpenTech/redis/releases进行下载,因为redis官网并没有提供windows版本的支持。github上面有开源的。下载zip版本。
下载完成后解压,打开
redis.windows.conf
,找到bind 127.0.0.1
,修改为bind 0.0.0.0
(原配置默认不准远程访问redis服务器,更改之后可以远程客户端访问)-
打开cmd进入redis根目录下面,运行命令:
redis-server.exe redis.windows.conf
,显示如下信息说明服务开启成功C:\Users\shixu\Downloads\Redis-x64-3.2.100>redis-server.exe redis.windows.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.2.100 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 7688 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [7688] 05 Mar 16:48:21.040 # Server started, Redis version 3.2.100 [7688] 05 Mar 16:48:21.041 * DB loaded from disk: 0.000 seconds [7688] 05 Mar 16:48:21.042 * The server is now ready to accept connections on port 6379 [7688] 05 Mar 16:57:26.639 * 10 changes in 300 seconds. Saving... [7688] 05 Mar 16:57:26.651 * Background saving started by pid 12784 [7688] 05 Mar 16:57:26.851 # fork operation complete [7688] 05 Mar 16:57:26.853 * Background saving terminated with success
另外开启一个客户端(注意:运行服务的那个命令窗口不能关闭,否则服务会关闭),在cmd下面输入:
redis-cli.exe -h {IP} -p {port}
(实际访问请将ip和port换位运行redis服务器的ip以及端口,默认是6379)
构建 tomcat-redis-session-manager-master
这部分可以自己编译,也可以直接从网盘下载编译好的jar包
jar包链接:http://pan.baidu.com/s/1bokMOVH
下载后将这些jar包导入到各个tomcat下面的lib文件夹
配置tomcat配置文件context.xml
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost" <!-- Redis服务IP地址 -->
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属性值,且都是以秒为单位(如有知道问题原因所在的,麻烦告诉我一声,非常感谢)
Nginx tomcat的负载均衡配置,这个网上比较多,这里不详细说了。