我试着让这个缓存每天凌晨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文档,但似乎只刷新已经加载到缓存中的数据。
TL;DR -寻找在一天中的特定时间用一组固定的键来预热缓存。
发布于 2015-12-15 15:17:37
据我所知,番石榴没有任何内置的“清新”/“温暖”值的一组键在一些预定的时间,但你可以很容易地做你自己。
升温缓存
您可以通过简单地在getAll(Iterable)
实例上调用LoadingCache<String, Long>
来取暖现金。例如:
loadingCache.getAll(keysToFreshen);
其中keysToFreshen
是Iterable<String>
的一个实例,包含您希望在凌晨3点(或任何时候)刷新的键(例如,Set<String>
)。
使用作业/任务计划程序运行缓存升温代码
现在只需使用工具运行loadingCache.getAll(keysToFreshen)
,将作业/任务安排在凌晨3点。您可以使用石英、春天、Java的ScheduledExecutorService
(参见这里中的示例)等。
https://stackoverflow.com/questions/34278928
复制相似问题