将缓存用作数据库前面的一层

时间:2019-07-15 10:35:36

标签: java caching guava jcache caffeine

我正在开发一些本质上是异步的后端服务。也就是说,我们有多个异步运行的作业,结果被写入到某些记录中。

该记录基本上是一个包装HashMap结果(键为job_id)的类。

问题是,我不想计算或不知道要运行多少个作业(如果我知道的话,我可以cache.invalidate()完成所有作业后才能使用密钥)

相反,我想采用以下方案:

  1. 设置新记录的有效期(即expireAfterWrite
  2. 到期时,写(实际上是upsert)记录数据库
  3. 如果发生缓存未命中,将调用load()从数据库中获取记录(如果找不到,请创建一个新记录)

问题: 我尝试使用Caffeine缓存,但问题是记录没有在应有的确切时间到期。然后,我阅读了SO answer的番石榴缓存,我猜想类似的机制也适用于咖啡因。

因此,问题在于,即使一条记录已经完成,它也可以在缓存中“等待”一段时间。有没有办法解决这个问题?也就是说,有没有一种方法可以“鼓励”缓存使过期的项目无效?

这使我质疑我的解决方案。您认为我的解决方案是一种好习惯吗?

P.S。如有必要,我愿意切换到其他缓存解决方案。

1 个答案:

答案 0 :(得分:1)

您可以看一下后面写的Ehcache。当然可以进行更多设置,但效果很好