基于 Redis 的 Tomcat 会话管理器

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

用法

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=""></Manager>
  • keyPrefix - 应用于所有 Redis 键的字符串前缀。允许将不同的Tomcat环境连接到同一个Redis实例。

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

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

  • broadcastSessionUpdates - 如果 true 和 readMode=MEMORY 则会话更新将在所有 Tomcat 实例中广播。默认为 true。

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

    • DEFAULT - 会话属性仅通过 Session.setAttribute 方法存储到 Redis 中。默认模式。
    • AFTER_REQUEST
      • readMode=REDIS中,通过Session.setAttribute方法对会话属性进行的所有更改都会累积在内存中,并仅在请求结束后才存储到 Redis 中。< /span>
      • readMode=MEMORY中,无论Session.setAttribute方法调用如何,所有会话属性始终在请求结束后存储到 Redis 中。当会话中存储的某些对象在没有 Session.setAttribute 方法执行的情况下更改其自身状态时,它非常有用。如果 broadcastSessionUpdates=true 更新的属性将从所有其他 Session 实例中删除,并在请求这些属性时从 Redis 重新加载。
  • configPath - Redisson YAML 配置的路径。请参阅配置 wiki 页面了解更多详细信息。

共享 Redisson 实例

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

将JndiRedissonFactory生成的共享redisson实例添加到标签区域的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 添加到 redisson 实例的资源链接tomcat/conf/context.xml

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

    <Manager className="org.redisson.tomcat.JndiRedissonSessionManager"
         readMode="REDIS" jndiName="bean/redisson" />
2.将两个 jar 复制到 TOMCAT_BASE/lib 目录中:
  • redisson-all-3.25.0.jar

  • Tomcat 7.x - redisson-tomcat-7-3.25.0.jar

  • Tomcat 8.x - redisson-tomcat-8-3.25.0.jar

  • Tomcat 9.x - redisson-tomcat-9-3.25.0.jar

  • Tomcat 10.x - redisson-tomcat-10-3.25.0.jar

尝试一下 Redisson PRO 超快性能 SLA 支持。

作者:Jeebiz  创建时间:2023-12-19 13:03
最后编辑:Jeebiz  更新时间:2023-12-22 21:09