在特定时间强制刷新番石榴缓存
Forcing refresh at specific time Guava Cache
我试图让这个缓存在每天凌晨 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 - 希望在一天中的特定时间用一组固定的键预热缓存
据我所知,Guava 在某个预定时间没有为一组键的 "freshen"/"warm" 值内置任何内容,但您可以轻松地自行完成.
预热缓存
您只需在 LoadingCache<String, Long>
实例上调用 getAll(Iterable)
即可预热现金。例如
loadingCache.getAll(keysToFreshen);
其中 keysToFreshen
是 Iterable<String>
的一个实例,其中包含您要在凌晨 3 点(或任何时候)更新的密钥(例如 Set<String>
)。
运行 带有 Job/Task 调度程序的缓存预热代码
您现在只需 运行 loadingCache.getAll(keysToFreshen)
使用工具安排 job/task 凌晨 3 点。您可以使用 Quartz, Spring, Java's ScheduledExecutorService
(see here 作为示例)等
我试图让这个缓存在每天凌晨 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 - 希望在一天中的特定时间用一组固定的键预热缓存
据我所知,Guava 在某个预定时间没有为一组键的 "freshen"/"warm" 值内置任何内容,但您可以轻松地自行完成.
预热缓存
您只需在 LoadingCache<String, Long>
实例上调用 getAll(Iterable)
即可预热现金。例如
loadingCache.getAll(keysToFreshen);
其中 keysToFreshen
是 Iterable<String>
的一个实例,其中包含您要在凌晨 3 点(或任何时候)更新的密钥(例如 Set<String>
)。
运行 带有 Job/Task 调度程序的缓存预热代码
您现在只需 运行 loadingCache.getAll(keysToFreshen)
使用工具安排 job/task 凌晨 3 点。您可以使用 Quartz, Spring, Java's ScheduledExecutorService
(see here 作为示例)等