Spring Boot 集成 Spring Session 实现集群会话共享,核心是将 HttpSession 迁移至 Redis 集中式存储,依赖 spring-boot-starter-data-redis 和 spring-session-data-redis,配置 Redis 连接与 session 参数,自动注册 filter 实现透明会话管理。

Spring Boot 集成 Spring Session 实现集群会话共享,核心是把原本存在单机内存里的 HttpSession 挪到 Redis 这类集中式存储中,让多个服务实例能读写同一份会话数据。整个过程不需改业务代码,只需依赖、配置和少量注解。
引入关键依赖
项目需同时接入 Redis 客户端和 Spring Session 的 Redis 实现:
-
spring-boot-starter-data-redis:提供 Redis 连接与操作能力 -
spring-session-data-redis:桥接 Spring Session 与 Redis,自动注册会话过滤器
使用 Maven 添加后,Spring Boot 的自动配置机制会识别并启用 Redis-backed session 支持。
配置 Redis 连接与 Session 行为
在 application.properties(或 application.yml)中设置基础参数:
-
spring.redis.host、spring.redis.port、spring.redis.password:指向实际 Redis 实例 -
spring.session.store-type=redis:显式声明使用 Redis 存储会话(Spring Boot 2.0+ 可省略,但建议保留) -
server.servlet.session.timeout:控制会话最大空闲时间(单位秒),例如1800 -
spring.session.redis.namespace=spring:session:指定 Redis 中 key 的前缀,避免不同环境冲突 -
spring.session.redis.flush-mode=on_save:默认行为,仅在响应提交时同步更新 Redis,兼顾性能与一致性
启用会话管理功能
Spring Boot 2.4+ 版本通常无需手动加注解——只要依赖和配置到位,springSessionRepositoryFilter 就会自动注册并生效。若需自定义(如调整超时或命名空间),可在启动类上添加:
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800, redisNamespace = "myapp:sessions")
该注解会创建一个 Filter,拦截所有请求,用 Spring Session 包装后的 HttpSession 替换容器原生实现,后续对 session.setAttribute() 等调用都会自动落库到 Redis。
验证与注意事项
启动应用后,访问任意带会话操作的接口(如登录或存值),即可在 Redis 中看到形如 spring:session:sessions:{sessionId} 的 Hash 结构。注意以下几点:
- 存入 session 的对象建议实现
Serializable;如需可读性,可自定义RedisSerializer改用 JSON 序列化 - Redis 连接池配置(如
lettuce.pool.max-active)应在高并发场景下合理调优 - 若使用 Nginx 做负载均衡,确保未开启 sticky session(如 ip_hash),否则会掩盖共享失效问题











