基于 Redis 的 Tomcat 会话管理器
在 Redis 中存储 Apache Tomcat 的会话,并允许跨 Tomcat 服务器集群分发请求。实现由 Redis 支持的非粘性会话管理。
- 支持 Apache Tomcat 7.x、8.x、9.x、10.x
- 官方文档:https://github.com/redisson/redisson/tree/master/redisson-tomcat
用法
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 更新时间:2024-10-26 16:27