14.5. Tomcat会话管理器(Tomcat Session Manager)

Redisson为Apache Tomcat集群提供了基于Redis的非黏性会话管理功能。该功能支持Apache Tomcat的6.x、7.x、8.x和9.x版。

Redisson实现的方式有别于现有的其他的Tomcat会话管理器(Tomcat Session Manager)。在每次调用HttpSession.setAttribute接口方法时,以每一条会话的字段属性(Attribute)为单位,将修改内容记录在Redis的一个Hash结构里。相比之下,其他的现有解决方案都普遍采用的是:在任何一个字段属性更改时,将整个会话序列化后保存。Redisson的实现方式产生的优势显而易见:在为Tomcat集群提供高效的非黏性会话管理的同时,避免了同一客户端的多个并发请求造成业务逻辑混乱。

使用方法:

  1. 首先将RedissonSessionManager添加到相关的context.xml(求中文文档连接)里:

    1. <Manager className="org.redisson.tomcat.RedissonSessionManager"
    2. configPath="${catalina.base}/redisson.conf" updateMode="DEFAULT" />

    readMode - 用来设定读取会话里各个属性的方式。主要分为以下两种:

    • MEMORY - 内存读取模式。直接从本地Tomcat中的会话里读取。这是默认情况。
    • REDIS - Redis读取模式。绕过本地会话信息,直接从Redis里读取。

    updateMode - 用来设定更新会话属性的方式。主要有以下两种:

    • DEFAULT - 会话的属性只能通过setAttribute方法来储存到Redis里。这是默认请况。
    • AFTER_REQUEST - 再每次请求结束以后进行一次所有属性全量写入Redis。

    configPath - 是指的Redisson的JSON或YAML格式的配置文件路径。配置文件详见这里

  2. 拷贝相应的 两个 JAR包到指定的TOMCAT_BASE/lib目录下:

    1. JDK 1.8+适用redisson-all-3.6.4.jar

      Tomcat 6.x适用redisson-tomcat-6-3.6.4.jarTomcat 7.x适用redisson-tomcat-7-3.6.4.jarTomcat 8.x适用redisson-tomcat-8-3.6.4.jarTomcat 9.x适用redisson-tomcat-9-3.6.4.jar

    2. JDK 1.6+适用redisson-all-2.11.4.jar

      Tomcat 6.x适用redisson-tomcat-6-2.11.4.jarTomcat 7.x适用redisson-tomcat-7-2.11.4.jarTomcat 8.x适用redisson-tomcat-8-2.11.4.jar