Nginx + Tomcat + Redis 实现Session共享(windows环境)

前言

集群中实现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的负载均衡配置,这个网上比较多,这里不详细说了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容