下是针对 RedisSessionManager 的 Tomcat context.xml 配置示例,覆盖基础单机 Redis、带密码 / 指定库、Redis 哨兵集群、自定义序列化 / 持久化策略 等常见场景

核心说明

配置中所有 className 需指向实际的 RedisSessionManager 全类名(示例中为 reyo.redis.session.manager.tomcat9.RedisSessionManager),Valve 需配置 RedisSessionHandlerValve 用于请求后会话持久化。

示例 1:基础单机 Redis 配置(最简版)

适配本地默认 Redis(localhost:6379,无密码,db=0):
xml
 
 
<Context>
    <!-- Redis 会话管理器核心配置 -->
    <Manager className="reyo.redis.session.manager.tomcat9.RedisSessionManager"
             host="localhost"
             port="6379"
             database="0"
             sessionPersistPolicies="DEFAULT"/>

    <!-- 必须配置 Valve,用于请求结束后处理会话保存 -->
    <Valve className="reyo.redis.session.manager.tomcat9.RedisSessionHandlerValve"/>
</Context>
 

示例 2:单机 Redis(带密码 / 自定义超时 / 指定 DB)

适配生产环境单机 Redis(指定密码、超时时间、数据库):
xml
 
 
<Context>
    <Manager className="reyo.redis.session.manager.tomcat9.RedisSessionManager"
             host="192.168.1.100"  <!-- Redis 服务器IP -->
             port="6380"           <!-- 非默认端口 -->
             password="yourRedisPwd123"  <!-- Redis密码 -->
             database="5"          <!-- 使用第5个数据库 -->
             timeout="3000"        <!-- 连接超时时间(毫秒) -->
             sessionPersistPolicies="SAVE_ON_CHANGE"/>  <!-- 属性变更立即保存 -->

    <Valve className="reyo.redis.session.manager.tomcat9.RedisSessionHandlerValve"/>
</Context>
 

示例 3:Redis 哨兵集群配置(高可用)

适配 Redis 哨兵模式(主从 + 哨兵),需指定哨兵主节点名和哨兵列表:
xml
 
 
<Context>
    <Manager className="reyo.redis.session.manager.tomcat9.RedisSessionManager"
             sentinelMaster="mymaster"  <!-- 哨兵配置的主节点名称 -->
             sentinels="192.168.1.101:26379,192.168.1.102:26379,192.168.1.103:26379"  <!-- 哨兵节点列表 -->
             password="sentinelRedisPwd"  <!-- 哨兵集群的密码(若有) -->
             database="2"
             sessionPersistPolicies="ALWAYS_SAVE_AFTER_REQUEST"/>  <!-- 请求结束强制保存 -->

    <Valve className="reyo.redis.session.manager.tomcat9.RedisSessionHandlerValve"/>
</Context>
 

示例 4:自定义序列化策略 + 多持久化策略

指定自定义序列化类(替代默认 JavaSerializer),并组合持久化策略:
xml
 
 
<Context>
    <Manager className="reyo.redis.session.manager.tomcat9.RedisSessionManager"
             host="192.168.1.100"
             port="6379"
             password="redis@123"
             serializationStrategyClass="com.custom.serializer.FastJsonSerializer"  <!-- 自定义序列化类 -->
             sessionPersistPolicies="SAVE_ON_CHANGE,ALWAYS_SAVE_AFTER_REQUEST"/>  <!-- 组合策略 -->

    <Valve className="reyo.redis.session.manager.tomcat9.RedisSessionHandlerValve"/>
</Context>
 
注:自定义 serializationStrategyClass 需实现 reyo.redis.session.manager.tomcat9.Serializer 接口。

示例 5:完整生产级配置(含 JVM 路由 / 会话超时)

适配分布式 Tomcat 集群(指定 JVM Route,配合负载均衡):
xml
 
 
<Context jvmRoute="tomcat-node1">  <!-- 集群节点标识,会话ID会带上该后缀 -->
    <Manager className="reyo.redis.session.manager.tomcat9.RedisSessionManager"
             host="redis-cluster.example.com"
             port="6379"
             password="ProdRedis@2024"
             database="1"
             timeout="5000"
             serializationStrategyClass="reyo.redis.session.manager.tomcat9.JavaSerializer"  <!-- 默认序列化 -->
             sessionPersistPolicies="DEFAULT,SAVE_ON_CHANGE"
             maxInactiveInterval="1800"/>  <!-- 会话超时时间(秒),优先级高于web.xml -->

    <Valve className="reyo.redis.session.manager.tomcat9.RedisSessionHandlerValve"/>
</Context>
 

关键配置参数说明

表格
 
参数名作用
host Redis 单机地址(哨兵模式下无需配置)
port Redis 端口(默认 6379)
password Redis 认证密码(无则不配置)
database Redis 数据库编号(默认 0)
timeout Redis 连接超时时间(毫秒,默认 Protocol.DEFAULT_TIMEOUT=2000)
sentinelMaster Redis 哨兵主节点名称(哨兵模式必填)
sentinels 哨兵节点列表,逗号分隔(如:ip1:port1,ip2:port2)
serializationStrategyClass 序列化实现类全类名(默认 JavaSerializer)
sessionPersistPolicies 会话持久化策略:
 
- DEFAULT:默认策略
 
- SAVE_ON_CHANGE:属性变更立即保存
 
- ALWAYS_SAVE_AFTER_REQUEST:请求结束强制保存(可组合,逗号分隔)
jvmRoute Tomcat 集群节点标识(会话 ID 后缀,避免集群会话冲突)

注意事项

  1. 需确保 Redis 客户端依赖(jedis)已放入 Tomcat 的 lib 目录;
  2. RedisSessionHandlerValve 必须配置,否则请求结束后会话无法持久化到 Redis;
  3. 哨兵模式下,host/port 配置会被忽略,以 sentinelMaster/sentinels 为准;
  4. 自定义序列化类需保证可序列化 / 反序列化 Tomcat 会话对象,避免类加载异常
posted @ 2026-05-21 19:53  锐洋智能  阅读(0)  评论(0)    收藏  举报