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

如何让Spring Boot缓存中单个条目按TTL自动过期驱逐?

更新(摘要)
  • 缓存中的单个条目需在TTL到期后被驱逐。
  • 环境配置:
    • Java: 17
    • spring-boot.version: 3.0.x

需求目标

每个请求携带ID获取数据,数据存储在类似KV-Store的仓库中(<fooId, fooData>结构)。为加速响应,使用Spring Boot Cache包装仓库。

快速响应的处理流程:

  1. 先查询缓存
  2. 若缓存无结果,再查询仓库

为控制缓存大小,需驱逐缓存条目。

虽有相关指南提供驱逐代码,但不能一次性驱逐所有条目。每个条目需在最后一次请求后保留(例如)30分钟。

示例事件流程:

用事件流程说明:
a) 请求条目foo1

  • foo1将在30分钟后被驱逐(-> 时间点30)

...10分钟过去(累计:10分钟)

b) 请求条目foo2

  • foo2将在30分钟后被驱逐(-> 时间点40)

...10分钟过去(累计:20分钟)

c) 再次请求条目foo1

  • foo1的驱逐时间重置为当前时间后30分钟(-> 时间点50)

...10分钟过去(累计:30分钟)

  • 无操作
    • foo1距离TTL到期还有20分钟
    • foo2距离TTL到期还有20分钟

...10分钟过去(累计:40分钟)

d) foo2因TTL到期被驱逐

  • foo1距离TTL到期还有10分钟

...10分钟过去(累计:50分钟)

e) foo1因TTL到期被驱逐

是否有无需使用外部库/产品的简便解决方案?

禁止使用的外部库/产品示例:

  • EhCache
  • Gemfire
  • Guava

感谢您的建议 :)

内容的提问来源于stack exchange,提问作者d.braun1991

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:05:27