2

我正在尝试编写一个应用程序来缓存每隔几秒钟重新加载一次。我决定使用 spring boot Caffeine 并获得了一个示例应用程序。但是当我指定 refreshAfterWrite 属性时,它会引发异常:refreshAfterWrite requires a LoadingCache

spring:
    cache:
        cache-names: instruments, directory
        caffeine:
            spec: maximumSize=500, expireAfterAccess=30s, refreshAfterWrite=30s

为了解决这个问题,我提供了加载缓存 Bean,但缓存完全停止工作:

@Bean
    public CacheLoader<Object, Object> cacheLoader() {
        return string -> {
            System.out.println("string = " + string);
            return string;
        };
    }

    @Bean
    public LoadingCache<Object, Object> loader(CacheLoader<Object, Object> cacheLoader) {
        return Caffeine.newBuilder()
                .refreshAfterWrite(1, TimeUnit.SECONDS)
                .build(cacheLoader);
    }

我们有一些简单的方法让重新加载工作吗?

4

1 回答 1

4

在这里总结一下,使用LoadingCacheCaffeine 的特性和 Spring 的缓存抽象并没有多大意义,因为它们共享很多特性。

@Cacheable通常提供一种方法来标记检索缓存中尚不存在的元素的方法。LoadingCache实现了相同的场景,要求您提供一个句柄,可以通过 id 加载缺失的元素。

如果您绝对需要使用 a LoadingCache,我会Cache在您的代码中注入并以编程方式与之交互。

于 2018-12-13T13:03:45.310 回答