spring boot 集成 spring session 实现集群会话共享,核心是将 httpsession 迁移至 redis 集中存储,业务代码无需改造;需引入 spring-boot-starter-data-redis 和 spring-session-data-redis 依赖,配置 redis 连接与 session 参数,添加 @enableredishttpsession 注解启用,确保 redis 开启键空间通知并合理设置命名空间。

Spring Boot 集成 Spring Session 实现集群会话共享,核心是把原本存在单个 JVM 内存里的 HttpSession 迁移到 Redis 这类集中式存储中,让多个服务实例能读写同一份会话数据。整个过程对业务代码完全透明——你照常调用 request.getSession() 和 session.setAttribute(),无需任何改造。
添加关键依赖
项目需同时引入 Redis 客户端支持和 Spring Session 的 Redis 实现:
-
spring-boot-starter-data-redis:提供基于 Lettuce 的 Redis 连接与操作能力 -
spring-session-data-redis:桥接 Spring Session 与 Redis,自动注册SessionRepositoryFilter
注意:Spring Boot 2.4+ 默认已包含 spring-session-core,无需单独引入;若使用较老版本(如 2.3.x),可显式添加该依赖确保兼容。
配置 Redis 连接与 Session 行为
在 application.yml 中设置基础参数:
spring:
redis:
host: 127.0.0.1
port: 6379
password: your-pass
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
session:
store-type: redis
timeout: 1800 # 30 分钟空闲超时
redis:
namespace: myapp:sessions # 推荐自定义命名空间,避免多环境 key 冲突
flush-mode: on_save # 响应提交时同步到 Redis,兼顾性能与一致性
其中 flush-mode: on_save 是默认且推荐的模式,避免高频写入影响性能;如需强一致性,可设为 immediate,但会增加 Redis 调用次数。
启用 Redis 会话管理
在启动类或任意配置类上添加 @EnableRedisHttpSession 注解:
@Configuration
@EnableRedisHttpSession(
maxInactiveIntervalInSeconds = 1800,
redisNamespace = "myapp:sessions"
)
public class SessionConfig {
}
该注解会自动注入 SessionRepositoryFilter,拦截所有 HTTP 请求,将 getSession() 等操作重定向至 Redis 存储。参数可与配置文件保持一致,也可在此处覆盖。
验证与注意事项
启动应用后,访问任意带 session.setAttribute() 的接口(如登录),然后去 Redis 中检查 key 是否生成:
- key 格式为:
myapp:sessions:sessions:{sessionId}和myapp:sessions:expirations:{sessionId} - 确保 Redis 版本 ≥ 2.8,且开启键空间通知(
notify-keyspace-events Ex)——云 Redis(如阿里云、腾讯云)通常默认开启或无需手动配置 - 若使用多个 Spring Boot 应用共用同一套 Redis,务必通过
redis.namespace区分,防止 session 互相覆盖
部署多个实例并用 Nginx 做负载均衡后,用户在任意节点登录,后续请求无论落到哪台机器,都能正确读取会话,真正实现无感共享。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











