Micronaut Redis缓存中的条目为何永不失效?
Micronaut Redis缓存条目未过期问题排查
你的Redis缓存配置和方法注解如下:
redis: uri: ${REDIS_URL:`redis://localhost`} caches: kyc-fenergo-service-token: expire-after-write: 14m
方法注解:
@Cacheable(value = "kyc-fenergo-service-token")
针对缓存条目从未失效的问题,可从以下方向排查:
配置属性兼容性问题
不同版本的Micronaut Data Redis对缓存过期配置的属性名可能存在差异。比如部分旧版本中,过期时间配置需使用expire-after-write-duration而非expire-after-write。核对你使用的Micronaut版本对应的官方文档,确认配置项名称是否正确。Redis端未正确设置过期时间
登录Redis服务器,执行TTL kyc-fenergo-service-token:[实际缓存键]命令(替换[实际缓存键]为方法调用生成的真实缓存键):- 若返回值为
-1,说明该键未设置过期时间,问题出在Micronaut的配置加载或注解处理环节; - 若返回值为840左右(14分钟对应秒数),则说明过期时间已设置,可能是缓存键生成逻辑导致每次调用生成不同键,误以为旧条目未失效。
- 若返回值为
配置未正确加载
检查配置文件是否被Micronaut正确读取:- 确认配置文件(如
application.yml)放置在src/main/resources目录下; - 若使用多环境配置,确认当前激活的profile包含该Redis缓存配置;
- 开启Micronaut的debug日志,查看启动时是否加载了
redis.caches.kyc-fenergo-service-token.expire-after-write配置项,以及读取到的值是否为14m。
- 确认配置文件(如
后续缓存更新操作覆盖过期设置
如果后续使用@CachePut注解更新该缓存条目,且@CachePut未关联正确的过期配置,可能导致更新后的缓存条目变为永久有效。检查是否存在这类更新操作,并确保@CachePut使用的缓存名称与@Cacheable一致。Redis服务器配置限制
部分Redis部署(如特定集群模式、自定义配置)可能禁用了键过期功能,或因内存淘汰策略(如非volatile-lru类策略)导致过期键未被及时清理。检查Redis的maxmemory-policy配置,确保其支持过期键的自动淘汰。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

