如何让Spring Boot缓存中单个条目按TTL自动过期驱逐?
更新(摘要)
- 缓存中的单个条目需在TTL到期后被驱逐。
- 环境配置:
- Java: 17
- spring-boot.version: 3.0.x
需求目标
每个请求携带ID获取数据,数据存储在类似KV-Store的仓库中(<fooId, fooData>结构)。为加速响应,使用Spring Boot Cache包装仓库。
快速响应的处理流程:
- 先查询缓存
- 若缓存无结果,再查询仓库
为控制缓存大小,需驱逐缓存条目。
虽有相关指南提供驱逐代码,但不能一次性驱逐所有条目。每个条目需在最后一次请求后保留(例如)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
相关产品推荐
相关产品推荐

