我想在Spring LoadingCache中添加几个不同的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,则可以将单个缓存公开为bean(因此为org.springframework.cache.Cache实现),我们将对其进行检测并自动为您创建SimpleCacheManager

请注意,此策略允许您将缓存抽象用于不同的实现。 first可以是咖啡因缓存,而second可以是其他提供程序的缓存。

09-17 13:05
查看更多