You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:02:43