spring.redis.database 是给 Spring Boot 自动装配的 RedisConnectionFactory(Jedis 或 Lettuce)用的,用于初始化时调用 setDatabase(),从而影响 RedisTemplate、StringRedisTemplate 及 @Cacheable 等所有基于默认自动配置的 Redis 操作;它对 Redisson、手动 new 的 Jedis 或自定义连接工厂无效。

直接生效,但仅对 Spring Data Redis 默认客户端(JedisConnectionFactory 或 LettuceConnectionFactory)起作用;Redission 完全不认这个配置。
spring.redis.database 是给谁用的?
这个配置项只被 Spring Boot 自动装配的 RedisConnectionFactory 读取,用于初始化连接工厂时调用 setDatabase(int) 方法。它影响的是:
-
RedisTemplate和StringRedisTemplate - 基于它们的缓存抽象(
@Cacheable等) - 所有走
spring-boot-starter-data-redis默认自动配置的 Redis 操作
它不会传递给 Redission、JedisPool 直接 new 出来的实例,也不会影响手动 new 的 Jedis 对象。
为什么设了 spring.redis.database=1 却还是连到 db0?
常见原因有三个:
- 你实际用的是
RedissonClient—— Redission 有自己的配置方式,完全忽略spring.redis.database,必须在redisson.yml或Config对象里显式设置database - 你手动定义了
RedisConnectionFactoryBean,但没调用setDatabase(1),导致覆盖了自动配置 - 应用同时引入了
spring-boot-starter-data-redis和redisson-spring-boot-starter,而后者优先级更高或未正确隔离连接实例
验证方法:启动时加 --debug,看日志里是否打印 Using database: 1(来自 JedisConnectionConfiguration 或 LettuceConnectionConfiguration)。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
Redission 怎么正确指定数据库?
Redission 不走 Spring 的 spring.redis.* 属性,必须独立配置:
- 使用
redisson.yml:singleServerConfig: address: "redis://127.0.0.1:6379" database: 1
- 或 Java Config 中:
Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379").setDatabase(1); - 若用
redisson-spring-boot-starter,可在application.yml里写:redisson: single-server-config: address: redis://localhost:6379 database: 1
注意:database 字段必须写在 Redission 自己的配置层级下,放在 spring.redis 下无效。
多个数据库共存时要注意什么?
Redis 本身不支持跨库事务或原子操作,SELECT 切库是连接级别的状态。这意味着:
- 一个
RedisTemplate实例只能固定操作一个库(由其RedisConnectionFactory决定) - 不能在一个事务中操作 db0 和 db1 的 key
- 如果业务需要多库隔离,建议为不同库声明多个
RedisTemplateBean,每个绑定独立的RedisConnectionFactory(设置不同database)
最容易被忽略的一点:Lettuce 默认启用连接池共享,多个 RedisConnectionFactory 如果没显式关闭共享,底层可能复用同一组连接,导致 database 设置被意外覆盖 —— 此时需配置 lettuce.pool.enabled=false 或确保每个 factory 使用独立 client。

















