<p>Spring Boot 3.x 必须使用 spring.data.redis. 前缀配置 Redis,旧的 spring.redis. 完全失效;连接池仅支持 Lettuce,需配置为 spring.data.redis.lettuce.pool.*;@ConfigurationProperties prefix 也须同步更新为 spring.data.redis。</p>

Spring Boot 3.x 不支持 spring.redis.pool.max-active 这类配置项,不是因为 Spring Boot “删了功能”,而是整个 Redis 配置体系被重构为模块化结构,spring.redis.* 前缀已废弃,所有配置必须走 spring.data.redis.* 路径 —— 否则属性根本不会被加载,Spring 会静默忽略。
spring.redis.* 在 3.x 中完全失效
Spring Boot 3.x 启动时,RedisProperties 类不再响应 spring.redis.host 或 spring.redis.timeout 这类旧键。即使你写了,也不会报错,但连接工厂拿不到值,最终 fallback 到 localhost:6379,导致 RedisConnectionFailureException。
-
spring.redis.host=localhost→ 3.x 中不生效,必须改为spring.data.redis.host=localhost -
spring.redis.password=123→ 必须写成spring.data.redis.password=123 -
spring.redis.database=1→ 对应spring.data.redis.database=1,字段名没变,前缀变了
连接池配置必须指定客户端类型
Spring Boot 2.x 允许直接写 spring.redis.jedis.pool.max-active 或 spring.redis.lettuce.pool.max-active;而 3.x 彻底移除了 Jedis 支持,只保留 Lettuce,且路径强制嵌套一层:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 2.x 写法(已无效):
spring.redis.lettuce.pool.max-active=8 - 3.x 正确写法:
spring.data.redis.lettuce.pool.max-active=8 - 漏掉
spring.data.redis.前缀,或写成spring.redis.lettuce.pool,都会导致连接池参数未注入 - 若没显式配
spring.data.redis.lettuce.pool,Lettuce 会用默认连接池(可能只有 1 个 active 连接),高并发下直接卡死
@ConfigurationProperties 前缀必须同步更新
如果你在代码里用 @ConfigurationProperties 手动绑定 Redis 配置,前缀不改就等于没配:
- 2.x 配置类:
@ConfigurationProperties(prefix = "spring.redis") - 3.x 必须改成:
@ConfigurationProperties(prefix = "spring.data.redis") - 字段名(如
host、port、password)可保持不变,但 prefix 错一个字符,整个对象就是 null - 别指望 Spring Boot 自动兼容 —— 它连 warning 都不打,只会让你在运行时发现
redisProperties.getHost()是 null
最易被忽略的点:配置文件改了,@ConfigurationProperties 类没改;或者 YAML 缩进错了一级(比如把 lettuce: 写在了 spring: 同级),导致 spring.data.redis.lettuce.pool 根本没被解析。这种问题不会编译报错,但启动后 Redis 操作必失败。

















