如何在Spring Boot中通过Redis管理Session会话_引入spring-session-data-redis依赖

酷辰大大_3844

酷辰大大_3844

2026-07-09

412人浏览

原创

必须使用spring-session-data-redis,因其提供http session与redis集成的自动拦截逻辑,而spring-boot-starter-data-redis仅支持基础redis操作,不处理session存储;缺少它会导致session仍存内存、分布式不共享等问题。

如何在spring boot中通过redis管理session会话_引入spring-session-data-redis依赖

必须用 spring-session-data-redis,不能只用 spring-boot-starter-data-redis 或旧版 spring-session。后者不提供自动 Session 存储能力,缺它就根本不会把 session 写进 Redis。

为什么只加 spring-boot-starter-data-redis 不行

这个 starter 只负责让 Spring Boot 能连上 Redis、操作 key-value,它完全不知道 HTTP Session 是什么。Session 管理需要额外的拦截逻辑(比如在请求进来时从 Redis 加载 session、响应出去时刷回 Redis),这部分由 spring-session-data-redis 提供。

常见错误现象:

  • 应用跑起来没报错,但 redis-cli keys * 查不到 spring:session: 开头的 key
  • 重启服务后用户仍保持登录(说明 session 还在内存里,没走 Redis)
  • 分布式部署下 session 无法共享,节点间状态不一致

spring-session-data-redis 的依赖写法(Maven)

Spring Boot 2.4+ 推荐使用以下写法(无需指定版本,由 Spring Boot BOM 管理):

<dependency><groupid>org.springframework.session</groupid><artifactid>spring-session-data-redis</artifactid></dependency>

注意点:

Pub Session Logs
Pub Session Logs

使用 jq 搜索和分析您自己的会话日志。还有 50+ 模型用于图像生成、视频生成、语音合成、语音识别、音乐、聊天等

下载
  • 不要同时引入 spring-session(无 data-redis 后缀)—— 它是老一代抽象层,和当前 Boot 版本不兼容
  • 不要用已废弃的 spring-boot-starter-redis(1.x 时代产物,2.x 起已移除)
  • 如果项目用了较老的 Spring Boot(如 2.1.x),需确认 spring-session-data-redis 版本 ≥ 对应 Boot 版本(例如 2.1.x 对应 2.1.x)

依赖生效后,@EnableRedisHttpSession 还要不要加

Spring Boot 2.0+ 默认启用自动配置,只要 classpath 有 spring-session-data-redis,且 spring.session.store-type=redis(或未显式设为 none),就会自动装配 Redis-backed Session。

但建议显式加注解,原因:

  • 明确表达意图,避免因配置遗漏导致 fallback 到内存 session
  • 方便控制参数:@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) 比配置文件更直观
  • 可配合 redisNamespace 隔离不同环境的 session key,防止冲突

不加注解时,server.servlet.session.timeout 会被忽略;加了之后,maxInactiveIntervalInSeconds 才真正生效。

最容易被忽略的一点:序列化要求

spring-session-data-redis 默认用 JdkSerializationRedisSerializer,这意味着存入 session 的所有对象都必须实现 Serializable。否则会静默失败(session 写不进 Redis,但也不报错)。

推荐做法:

  • 改用 GenericJackson2JsonRedisSerializer(需自定义 RedisTemplate bean)
  • 确保你往 HttpSession 放的对象是简单 POJO 或基本类型,避免塞 HttpServletRequest、Connection 等不可序列化对象
  • 上线前用 redis-cli monitor 观察是否有 SET 命令失败,或检查日志中是否出现 Cannot serialize 类似提示

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2251

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

437

25

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

876

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1826

14

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4209

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3695

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6652

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习