我一直在阅读infinispan ...我需要使用普通的vanilla缓存,没有集群,没有辅助hibernate缓存。
我知道在到期后,Cache中的对象将被销毁,我不明白的是如何在它们被销毁之前刷新这些对象。我查看了这些事件,我没有看到这样的事情。
我的目标是在给定时间内拥有一个包含JPA结果查询的Map,然后不时刷新结果。此缓存是只读的,无需钝化或存储条目。
那么,如何在缓存过期之前将新值放入缓存中?我猜测infinispan应该提供一种方法,或者我错过了什么?也许这个逻辑应该在@Scheduler
EJB中使用@Singleton
计时器来实现。
答案 0 :(得分:2)
如果您不希望缓存中的内容过期,则为缓存设置负 timeToLive ,它们将永远保留。 或者,如果您需要某些东西,只有在它们没有用于例如5秒,然后将 maxIdle 设置为5秒。在该密钥的每次读取( cache.get())上, maxIdle 的启动时间都会被重置,因此只要频繁使用它们,事情就永远不会从缓存中消失
答案 1 :(得分:1)
我对Cache有一个不好的看法。
缓存项目有一个到期时间,因此可以检查某个给定实体是否在那里,如果它不存在则意味着它已经过期,所以是时候再次加载该给定值。所以不需要实现计时器。此外,当给定项目过期时,缓存将“自行清除”。