Я следовал за документацией кеша гуавы и кодировал асинхронную перезагрузку кеша в моем приложении.Кроме того, во время запуска приложения я загружаю кеш, используя cache.put
.Я перезагружаю его каждые 15 минут после этого (при условии, что поступает запрос в / после 15 минут).Во время отладки я обнаружил, что перезагрузка вызывается правильно, и мое приложение не ожидает обновления графика из БД.
Мой вопрос: мне нужно продолжать переопределять метод загрузки в моем приложении?Как описано выше, начальная загрузка кеша выполняется при запуске приложения.
Ниже приведен мой перефразированный код (примерно такой же, как в документации):
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;
}
});