番石榴缓存异步重新加载

时间:2018-12-11 22:44:41

标签: java-8 guava

我遵循了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;
            }
        });

1 个答案:

答案 0 :(得分:0)

我根据对番石榴缓存的了解以及上面的@BenManes聊天写了一篇linkedin文章。

这里是:https://www.linkedin.com/pulse/asynchronous-reload-guava-cache-caffeine-bhanuprakash-devapatla/

HTH