Caching 如何在缓存项过期之前处理它们?

Caching 如何在缓存项过期之前处理它们?,caching,infinispan,Caching,Infinispan,我希望在缓存项过期之前对其进行处理,这是我的用例: 我正在使用一个10分钟过期且没有缓存存储的应用程序服务器来将数据放入我的应用程序服务器, 因此,远程客户端可以在数据过期之前从应用服务器检索此数据 在缓存中的数据过期之前,我想警告那些没有检索到数据的少数懒惰远程客户端,这样他们就可以加快速度,在数据过期之前检索数据 我怎样才能做到这一点 缩短过期时间并在CacheEntryRemovedEvent上添加一个on-CacheEntryRemovedEvent以重新添加删除的元素是不正确的:客户

我希望在缓存项过期之前对其进行处理,这是我的用例:

我正在使用一个10分钟过期且没有缓存存储的应用程序服务器来将数据放入我的应用程序服务器, 因此,远程客户端可以在数据过期之前从应用服务器检索此数据

在缓存中的数据过期之前,我想警告那些没有检索到数据的少数懒惰远程客户端,这样他们就可以加快速度,在数据过期之前检索数据

我怎样才能做到这一点

缩短过期时间并在CacheEntryRemovedEvent上添加一个on-CacheEntryRemovedEvent以重新添加删除的元素是不正确的:客户端可能会尝试获取其数据 当监听器重新添加它时,删除和重新添加看起来并不好,实现只重新添加一次的逻辑会使这变得更复杂

假设有可能获得缓存项,则按过期顺序键就足够了,例如,接近其过期时间的键在开始时 在不修改上次访问时间的情况下,我会向懒惰的客户端发送警告,让它们快点来取数据,这样就不会干扰清除过期条目的缓存机制

我考虑过启用钝化、处理钝化和激活事件,以及配置数据存储,但。。。。这会使解决方案过于复杂


您可以创建另一个缓存,使条目的寿命更短。然后,可以使用CacheEntryRemovedEvent上的侦听器通知客户端。
您甚至可以通过CacheEntryCreatedEvent/CacheEntryModifiedEvent的另一个侦听器自动创建此记录。

感谢您的帮助回答。我更想寻找一种方法,在没有任何其他数据结构的情况下,在您的答案中使用缓存,但是,使用事件处理其他缓存是聪明的,我将尝试一下当条目从主缓存中逐出/删除时,它们也应该从懒惰客户端的缓存中删除。由于我正在为惰性客户端使用带有RemovalCause.EXPIRED的Guava缓存,因此只有过期的条目才会触发客户端警告。确实,过期通知未实现,但JIRA已重新打开,因为现在可以实现。对不起,我忘了。