过期时数据库中的咖啡因缓存更新值

Caffeine cache update value from db when expired

提问人:Дима Шестаев 提问时间:11/1/2023 最后编辑:marc_sДима Шестаев 更新时间:11/12/2023 访问量:38

问:

看起来像一个简单的任务,我想要的只是通过再次从数据库查询来更新缓存中的过期值。我想在缓存生成器中指定此步骤。

    new CaffeineCache(Caffeine
      .newBuilder()
      .removalListener[UUID, Option[F]]((k, v, rc) => fetchNewDataByKey(k))
      .recordStats()
      .build[UUID, Entry[Option[F]]]())

一开始,我认为 evictionListener 或 removalListener 是一种解决方案,但我无法将提取的值放回缓存中,它看起来像一个应该在构建器内部的选项,但到目前为止找不到我正在寻找的任何迹象。

总之。我想要一个缓存,在值过期时获取新数据,然后用新的 ttl 将其放回缓存中。

如果没有内置的解决方案,我想我将运行一个旁路进程,该进程将刷新这些值。

(如果您知道如何使用任何其他缓存而不是咖啡因来做到这一点,也请告诉我)

java scala 缓存 caffeine-cache

评论

1赞 Ben Manes 11/1/2023
如果缓存是最终字段,则可以使用删除侦听器,以便该方法可以延迟引用它。但是,您需要使用 a,以便它主动过期并重新加载。大多数情况下,您会使用以较短的时间间隔主动重新加载活动内容,否则会让数据过期。如果您想要一个完全重新加载的无限缓存,那么具有并发映射的调度执行器就足够了。schedulerrefreshAfterWrite
1赞 Gaël J 11/1/2023
正如 Ben 所说,如果我正确理解您的需求,我会使用 refreshAfterWrite 或 .expireAfterWrite

答: 暂无答案