spring - Spring CaffeineCacheManager 中添加了多个 Caffeine LoadingCache

标签 spring spring-cache caffeine

我希望添加几个不同的 LoadingCache到 Spring CacheManager ,但是我不明白如何使用 CaffeineCacheManager 实现这一点。看来只有一个加载器可以刷新内容,但是我需要为每个缓存使用单独的加载器。是否可以向 Spring 缓存管理器添加多个加载缓存?如果是这样,那么如何?

CaffeineCacheManager cacheManage = new CaffeineCacheManager();

LoadingCache<String, Optional<Edition>> loadingCache1 = 
            Caffeine.newBuilder()
            .maximumSize(150)
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .build(test -> this.testRepo.find(test));

LoadingCache<String, Optional<Edition>> loadingCache2 = 
            Caffeine.newBuilder()
            .maximumSize(150)
            .refreshAfterWrite(5, TimeUnit.MINUTES)
            .build(test2 -> this.testRepo.find2(test2));

// How do I add to cache manager, and specify a name?

最佳答案

是的,这是可能的。由于您需要微调每个缓存,因此您可能更擅长自己定义它们。回到您的示例,下一步是:

SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(Arrays.asList(
    new CaffeineCache("first", loadingCache1),
    new CaffeineCache("second", loadingCache2)));

然后您可以照常使用它,例如

@Cacheable("first")
public Foo load(String id) { ... }

如果您使用 Spring Boot,您可以将单个缓存公开为 beans(因此 org.springframework.cache.Cache 实现),我们将检测它们并创建一个 SimpleCacheManager自动为您服务。

请注意,此策略允许您将缓存抽象与不同的实现一起使用。 first可能是咖啡因缓存和 second来自另一个提供商的缓存。

关于spring - Spring CaffeineCacheManager 中添加了多个 Caffeine LoadingCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44507309/

相关文章:

java - 咖啡因:当AsyncLoader无法刷新时,请使用过时的值

java - 在 Hibernate 中使用实体作为 DTO

spring - Spring 中特定咖啡因缓存的配置

java - 响应式(Reactive)应用程序中的 Spring Cache

将对象列表放入 Hazelcast 缓存时抛出 HazelcastSerializationException

spring-boot - 使用 Spring Cacheable 的 L1 + L2 缓存策略

java - Controller 返回包含两个实体而不是一个实体的 JSON

spring - 这很可能会在 Tomcat 中造成内存泄漏吗?

java - 为什么方法 contextInitialized 不调用?

spring-cache - Spring缓存动态设置过期时间 - Caffeine