我正试图让这个缓存每天凌晨3点刷新。问题是用户必须等待很长时间才能使缓存预热。因此,我希望它能在一夜之间得到更新,并准备好在早上快速访问UI。
return CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterAccess(1, TimeUnit.DAYS)
.build(new CacheLoader<String, Long>() {
@Override
public Long load(String key)
throws Exception {
return db.getMetrics(key);
}
});
我希望能够在缓存中提供一组固定的密钥,以便在凌晨3点刷新。
我读了Google documentation,但似乎只刷新已经加载到缓存中的数据。
TL; DR - 希望在白天的特定时间使用一组固定的密钥来预热缓存
答案 0 :(得分:1)
据我所知,Guava在某些预定时间内没有任何内置于“刷新”/“暖”值的一组键,但您可以轻松地自行完成。
加热缓存
只需在getAll(Iterable)
个实例上调用LoadingCache<String, Long>
即可为现金预热。 e.g。
loadingCache.getAll(keysToFreshen);
其中keysToFreshen
是Iterable<String>
的一个实例,其中包含您希望在凌晨3点(或任何时候)刷新的密钥(例如Set<String>
)。
使用作业/任务计划程序运行缓存变暖代码
现在,您只需使用工具运行loadingCache.getAll(keysToFreshen)
,即可在凌晨3点安排作业/任务。您可以使用Quartz,Spring,Java的ScheduledExecutorService
(例如,请参阅here)等。