我正在开发一些本质上是异步的后端服务。也就是说,我们有多个异步运行的作业,并将结果写入某个记录。
该记录基本上是一个包装HashMap
结果的类(键是job_id
)。
问题是,我不想提前计算或知道要运行多少作业(如果我知道,我可以cache.invalidate()
在所有作业都已经完成时打开钥匙)
相反,我想要以下方案:
- 为新记录设置到期时间(即
expireAfterWrite
) - 到期时,将(实际上
upsert
)记录写入数据库 - 如果发生缓存未命中,
load()
则调用从数据库中获取记录(如果未找到,则创建一个新记录)
问题: 我尝试使用 Caffeine 缓存,但问题是记录没有在预期的确切时间过期。然后我阅读了这个关于 Guava's Cache 的SO 答案,我想类似的机制也适用于咖啡因。
所以问题是一个记录可以在缓存中“等待”很长一段时间,即使它已经完成了。有没有办法克服这个问题?也就是说,有没有办法“鼓励”缓存使过期项目无效?
这导致我质疑我的解决方案。你会认为我的解决方案是一个好习惯吗?
PS 如有必要,我愿意切换到其他缓存解决方案。