我想在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
可以是其他提供程序的缓存。