在Redis中存储Apache Tomcat的会话,并允许在Tomcat服务器群集之间分配请求。实施由Redis支持的非粘性会话管理。

支持Apache Tomcat 7.x,8.x,9.x

用法

1.添加会话管理器

添加RedissonSessionManager在全局范围内-tomcat/conf/context.xml或每个应用程序上下文-tomcat/conf/server.xml

<Manager className="org.redisson.tomcat.RedissonSessionManager"
  configPath="${catalina.base}/redisson.conf" 
  readMode="REDIS" updateMode="DEFAULT" broadcastSessionEvents="false"
  keyPrefix=""/>
  • keyPrefix-应用于所有Redis键的字符串前缀。允许将不同的Tomcat环境连接到同一Redis实例。

  • readMode-读取会话属性模式。有两种模式可用:

    • MEMORY-将属性存储到本地Tomcat Session和Redis中。进一步的会话更新使用基于Redis的事件传播到本地Tomcat会话。
    • REDIS-仅将属性存储到Redis中。默认模式。
  • broadcastSessionEvents-如果true再sessionCreated和sessionDestroyed事件会在所有Tomcat实例广播,并导致触发所有注册HttpSessionListeners。默认值为false。

  • updateMode-会话属性更新模式。有两种模式可用:

    • DEFAULT-会话属性仅通过Session.setAttribute方法存储到Redis中。默认模式。
    • AFTER_REQUEST-每个请求后,所有会话属性都存储到Redis中。当某些存储在会话中的对象更改了自己的状态而没有Session.setAttribute执行方法时,这很有用。
  • configPath-Redisson YAML配置的路径。有关更多详细信息,请参见配置Wiki页面。

共享Redisson实例

可以通过JNDI注册中心减少Tomcat为多个上下文创建的Redisson实例的数量:

添加JndiRedissonFactory实例到:tomcat/conf/server.xml 的 GlobalNamingResources 标签中:

  <GlobalNamingResources>
    <Resource name="bean/redisson"
          auth="Container"
              factory="org.redisson.JndiRedissonFactory"
              configPath="${catalina.base}/conf/redisson.yaml"
          closeMethod="shutdown"/>
  </GlobalNamingResources>

添加JndiRedissonSessionManager带有资源链接以重做实例到tomcat/conf/context.xml

<ResourceLink name="bean/redisson" global="bean/redisson" type="org.redisson.api.RedissonClient" ></ResourceLink>

<Manager className="org.redisson.tomcat.JndiRedissonSessionManager"
readMode="REDIS" jndiName="bean/redisson" ></Manager>

2.将两个Jar复制到TOMCAT_BASE/lib目录中:

redisson-all-3.14.1.jar

对于Tomcat 7.x
redisson-tomcat-7-3.14.1.jar
对于Tomcat 8.x
redisson-tomcat-8-3.14.1.jar
对于Tomcat 9.x
redisson-tomcat-9-3.14.1.jar

作者:Jeebiz  创建时间:2023-01-09 15:43
最后编辑:Jeebiz  更新时间:2024-08-16 11:44