SpringBoot中Redis缓存过期时间设置失效求助
Redis缓存过期时间配置不生效的排查与解决(Jedis连接工厂场景)
1. 先确认基础配置是否到位
- 确保项目引入了
spring-boot-starter-data-redis依赖,Jedis作为连接客户端需要这个starter提供的自动配置支持。 - 检查配置文件的格式是否正确:
- 如果你用的是
application.properties,确认配置是spring.cache.redis.time-to-live=1m; - 如果你用的是
application.yml,要写成:spring: cache: redis: time-to-live: 1m
time-to-live写成ttl或者其他变体。 - 如果你用的是
- 确认你的Spring启动类或者配置类上添加了
@EnableCaching注解,这是启用Spring缓存功能的必要条件。
2. 排查自定义RedisCacheManager的问题
如果你手动创建了RedisCacheManager的Bean,很可能覆盖了Spring的自动配置逻辑,这时候需要在Bean中显式设置默认过期时间。示例代码如下:
@Bean public RedisCacheManager cacheManager(RedisConnectionFactory jedisConnectionFactory) { // 构建默认缓存配置 RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(1)) // 全局默认1分钟过期 .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); return RedisCacheManager.builder(jedisConnectionFactory) .cacheDefaults(defaultCacheConfig) .build(); }
如果你的代码中有自定义缓存名称的特殊配置,也要确保这些配置里没有忽略过期时间的设置。
3. 检查缓存注解的使用
- 确认使用
@Cacheable、@CachePut等注解时,有没有指定自定义的cacheManager属性。如果指定了,要确保对应的cacheManagerBean已经正确配置了过期时间。 - 示例:
@Cacheable(value = "userCache", cacheManager = "cacheManager"),这里的cacheManager必须是你上面配置的、带有过期时间的Bean实例。
4. 验证缓存实际过期情况
直接用Redis客户端(比如redis-cli)连接到你的Redis实例,执行TTL 你的缓存键命令,查看该键的剩余过期时间。如果返回-1说明没有设置过期时间,返回-2说明键不存在,返回正数则是剩余秒数。
另外,检查代码中是否有手动调用RedisTemplate设置缓存的地方,如果这些地方没有指定过期时间,会覆盖全局配置的默认值。
内容的提问来源于stack exchange,提问作者SR3599
相关产品推荐
相关产品推荐

