现象:A机登录,跳转后,有概率还显示登录页面。刷新后可进入系统。 怀疑是session共享,写入过慢导致。 --------------------------- 配置如下: <Manager readMode="MEMORY" <!-- 优先从本地内存读取 --> updateMode="AFTER_REQUEST" <!-- 默认请求结束后才同步到Redis --> broadcastSessionEvents="true"/> <!-- 启用事件广播 --> --------------------------- 用户请求 → 1. 检查本地内存是否有session数据 ↓ 2. 如果本地有 → 直接返回(快速) ↓ 3. 如果本地没有 → 从Redis加载 → 存入本地内存 → 返回 --------------------------- Session.setAttribute() → 1. 先修改本地内存 ↓ 2. 如果是updateMode="AFTER_REQUEST" → 请求结束后才异步写入Redis ↓ 3. 如果是updateMode="IMMEDIATE" → 立即同步到Redis --------------------------- Tomcat1 更新 session → 本地内存 + Redis + 发布事件 Tomcat2 收到事件 → 使本地对应 session 失效 Tomcat2 下次读取 → 发现本地失效 → 从 Redis 重新加载 ---------------------------
# 配置1:偏向性能(适合门户网站) readMode: "MEMORY" updateMode: "AFTER_REQUEST" # 异步写入 broadcastSessionEvents: true
# 配置2:偏向一致性(适合电商交易) readMode: "REDIS" # 总是读取最新 updateMode: "IMMEDIATE" # 同步写入
# 配置3:平衡方案(大多数场景) readMode: "MEMORY" updateMode: "IMMEDIATE" # 写入立即同步 broadcastSessionEvents: true # 更新通知其他节点 ---------------------------
<Manager className="org.redisson.tomcat.RedissonSessionManager" configPath="conf/redisson.conf" readMode="REDIS" updateMode="IMMEDIATE" broadcastSessionEvents="false" keyPrefix="xxx"/>
|