作者:idc01 | 来源:互联网 | 2023-02-01 14:13
我想在LoadingCache
Spring 上添加几个不同的CacheManager
,但我不知道如何使用它CaffeineCacheManager
.似乎只有一个加载器可以刷新内容,但是我需要为每个缓存单独加载.是否可以向Spring缓存管理器添加多个加载缓存?如果是这样,那怎么样?
CaffeineCacheManager cacheManage = new CaffeineCacheManager();
LoadingCache> loadingCache1 =
Caffeine.newBuilder()
.maximumSize(150)
.refreshAfterWrite(5, TimeUnit.MINUTES)
.build(test -> this.testRepo.find(test));
LoadingCache> 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?
Stephane Nic..
15
对的,这是可能的.由于您需要对每个缓存进行微调,因此您最好自己定义它们.回到您的示例,下一步将是:
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
来自其他提供商的缓存.
1> Stephane Nic..:
对的,这是可能的.由于您需要对每个缓存进行微调,因此您最好自己定义它们.回到您的示例,下一步将是:
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
来自其他提供商的缓存.