1

我试图让这个缓存每天凌晨 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 点刷新。

我阅读了谷歌文档,但似乎只刷新了已经加载到缓存中的数据。

TL;DR - 希望在一天中的特定时间使用一组固定的键来预热缓存

4

1 回答 1

1

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

加热缓存

getAll(Iterable)您可以通过简单地调用您的LoadingCache<String, Long>实例来加热您的现金。例如

loadingCache.getAll(keysToFreshen);

包含您想要在凌晨 3 点(或任何时候)刷新的键keysToFreshen的实例在哪里(例如 a )。Iterable<String>Set<String>

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

您现在只需要loadingCache.getAll(keysToFreshen)使用工具在凌晨 3 点运行即可安排作业/任务。您可以使用QuartzSpring、 Java 的ScheduledExecutorService(参见此处的示例)等。

于 2015-12-15T15:17:37.260 回答