我遵循了guava cache documentation并在应用程序中编码了异步加载缓存。另外,在应用程序启动期间,我正在使用cache.put
加载缓存。之后,我每15分钟重新加载一次(前提是15分钟/之后有传入请求)。调试时,我发现重新加载被正确调用,并且我的应用程序不等待数据库中的更新图。
我的问题是:我是否需要继续覆盖应用程序中的load方法?如上所述,缓存的初始加载是在应用程序启动时完成的。
下面是我的释义代码(与文档中的代码大致相同):
private LoadingCache<String, Graph> cache = CacheBuilder.newBuilder()
.refreshAfterWrite(2, TimeUnit.MINUTES)
.recordStats()
.build(new CacheLoader<String, Graph>() {
@Override
public Graph load(String key) {
return getGraphFromDB(key);
}
public ListenableFuture<Graph> reload(final String key, Graph prev) {
ListenableFutureTask<Graph> task = ListenableFutureTask.create(new Callable<Graph>() {
public Graph call() {
Graph graph = prev;
try {
graph = getGraphFromDB(key);
} catch (Exception e) {
logger.error("There was an exception when reloading the cache",e);
}
finally {
return graph;
}
}
});
executor.execute(task);
return task;
}
});
答案 0 :(得分:0)
我根据对番石榴缓存的了解以及上面的@BenManes聊天写了一篇linkedin文章。
这里是:https://www.linkedin.com/pulse/asynchronous-reload-guava-cache-caffeine-bhanuprakash-devapatla/
HTH