java使用缓存作为数据库前面的层
我正在开发一些本质上是异步的后端服务。也就是说,我们有多个异步运行的作业,并将结果写入某个记录
这个记录基本上是一个类,它包装了HashMap
个结果(键是job_id
)
问题是,我不想预先计算或知道要运行多少个作业(如果我知道,我可以在所有作业都已完成时cache.invalidate()
键)
相反,我希望有以下方案:
- 设置新记录的到期日(即
expireAfterWrite
) - 到期时,将记录写入数据库(实际上是
upsert
) - 如果发生缓存未命中,则调用
load()
从数据库中获取记录(如果未找到,则创建一个新记录)
问题: 我尝试使用咖啡因缓存,但问题是记录并没有在它们应该过期的确切时间过期。然后我读了这篇关于番石榴贮藏的文章,我想类似的机制也适用于咖啡因
因此,问题是记录可以在缓存中“等待”相当长的一段时间,即使它已经完成。有没有办法克服这个问题?也就是说,有没有办法“鼓励”缓存使过期的项目无效
这让我怀疑我的解决方案。你认为我的解决方案好吗?
另外,如有必要,我愿意切换到其他缓存解决方案
# 1 楼答案
您可以查看带有write-behind的Ehcache。这肯定是更多的安装工作,但它是相当好的工作