在特定时间强制刷新Guava Cache

时间:2015-12-15 00:14:24

标签: caching timer guava google-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 - 希望在白天的特定时间使用一组固定的密钥来预热缓存

1 个答案:

答案 0 :(得分:1)

据我所知,Guava在某些预定时间内没有任何内置于“刷新”/“暖”值的一组键,但您可以轻松地自行完成。

加热缓存

只需在getAll(Iterable)个实例上调用LoadingCache<String, Long>即可为现金预热。 e.g。

loadingCache.getAll(keysToFreshen);

其中keysToFreshenIterable<String>的一个实例,其中包含您希望在凌晨3点(或任何时候)刷新的密钥(例如Set<String>)。

使用作业/任务计划程序运行缓存变暖代码

现在,您只需使用工具运行loadingCache.getAll(keysToFreshen),即可在凌晨3点安排作业/任务。您可以使用QuartzSpring,Java的ScheduledExecutorService(例如,请参阅here)等。