我希望添加几个不同的 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/