如何将带默认过期时间的RedisCacheManager迁移至Spring Data Redis 2.x
Spring Data Redis 2.x 缓存默认过期时间配置迁移指南
嘿,我刚完成过类似的Spring Data Redis升级工作,正好能帮到你!
等效配置:用 RedisCacheConfiguration.entryTtl() + 构建器模式
没错,RedisCacheConfiguration.entryTtl(ttl) 就是2.x版本里替代旧版 setDefaultExpiration 的核心配置项,但要注意2.x重构了缓存管理器的创建方式,不能再直接调用setter方法,得用构建器模式来组装配置。
举个完整的Java配置类示例:
@Configuration public class RedisCacheConfig { @Bean public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { // 1. 创建默认缓存配置,设置全局默认过期时间 RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(15)); // 这里替换成你的默认过期时间 // 2. 如果需要自定义序列化规则(比如JSON序列化),可以在这里追加配置 defaultCacheConfig = defaultCacheConfig .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); // 3. 用构建器创建RedisCacheManager,绑定默认配置 return RedisCacheManager.builder(redisConnectionFactory) .cacheDefaults(defaultCacheConfig) // 对应旧版的setDefaultExpiration // 如果你需要给特定缓存单独设置过期时间,可以加下面这行 // .withCacheConfiguration("specialCache", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1))) .build(); } }
关于迁移指南
其实Spring Data官方是有1.x到2.x的迁移文档的,它包含在Spring Data Redis的官方参考手册里,里面详细说明了缓存模块的变化:
- 旧版
RedisCacheManager的setter配置方式被废弃,全部改用构建器API - 缓存的具体规则(过期时间、序列化、前缀等)统一收敛到
RedisCacheConfiguration中管理 - 新增了对缓存名称前缀、键前缀的更灵活配置
核心迁移要点总结
- 抛弃直接实例化
RedisCacheManager并调用setDefaultExpiration的写法 - 用
RedisCacheConfiguration.defaultCacheConfig()创建基础配置,通过entryTtl设置全局过期时间 - 借助
RedisCacheManager.builder()把配置和连接工厂绑定,完成管理器的创建 - 针对单个缓存的个性化配置,用
withCacheConfiguration方法逐个添加
内容的提问来源于stack exchange,提问作者M. Justin
相关产品推荐
相关产品推荐

