我正在使用Google Guava库进行缓存.对于自动缓存刷新,我们可以执行以下操作:
cache = CacheBuilder.newBuilder()
.refreshAfterWrite(15, TimeUnit.MINUTES)
.maximumSize(100)
.build(....);
Run Code Online (Sandbox Code Playgroud)
但是,当第一个条目的陈旧请求发生时,将执行自动刷新.
有没有办法自动刷新它,即使没有缓存数据的请求?就像每15分钟一样,缓存数据应该从Db中提取并加载它,无论是否有人调用缓存数据.
此外,Guava的缓存到期时间适用于整个缓存.是否可以基于密钥使缓存值失效?像密钥"NOT_SO_FREQ_CHANGE_DATA"的缓存数据每1小时到期一次,密钥"FREQ_CHANGING_DATA"的数据应该每15分钟到期一次?
在guava中,使用LoadingCache时会同步调用CacheLoader.但是,我的load()操作可能需要很长时间(约1秒),我想采取默认操作,以防它需要太长时间(> 200毫秒)并异步加载该值.
有没有办法实现这个目标?或者您可以推荐其他方法吗?