ExpireAfter 只会清除该项目,但不会重新创建该项目。所以我需要做的是,在预定义的时间间隔之后,我需要从缓存中清除特定项目,同时我需要重新创建它。如果数据没有变化,它可能会使用相同的数据重新创建。假设数据已更改,重新创建将提供最新的对象。
我的想法是一直从缓存中检索最新的项目。相比之下,刷新功能(https://github.com/ben-manes/caffeine/wiki/Refresh)将为第一个请求提供陈旧的项目并进行异步加载。因此,对于第二个请求,缓存将提供最新的对象。
- 在我的情况下,重新获取过期条目的异步删除侦听器应该可以工作。您能否提供一些有关如何实现这一目标的信息?
- 我也很想知道定时任务是怎么做到的?
假设缓存可以解决以下两种情况:
后续请求案例:
我知道 refreshAfterWrite 将第一次提供过时的条目,但对于第二次请求,如果缓存尚未完成加载过期条目会发生什么?
缓存是否阻塞第二个请求,完成重新获取,然后将最新值提供给第二个请求?
这个想法是让缓存在定义的条目到期时间之后提供最新的数据。
在缓存必须一次性加载等于其容量的值的情况下:
假设缓存大小为 100,加载所有 100 个项目的时间为 2 分钟。
假设第一个请求将同时将 100 个项目加载到缓存中,在定义的到期时间之后,缓存应该驱逐并重新获取所有 100 个元素。
对于从这 100 个项目中访问项目的第二个请求,我怎样才能使缓存足够智能,以便它返回已重新加载的条目并异步重新加载其他条目?
这个想法不是阻止对现有条目的任何请求。为现有条目提供请求并为剩余的过期条目重新加载。