如何解决使用Spring和Caffeine定义多个缓存配置
我需要在服务中使用多个缓存以用于不同的用途。 我正在寻找一种方法来分隔其配置,例如 maximumSize 和 expireAfterWrite 。 我正在使用Spring和Kubernetes,在deploy.yaml中,我有这个:
spring:
main:
allow-bean-definition-overriding: true
cache:
type: CAFFEINE
cache-names: cacheA,cacheB
caffeine:
spec: expireAfterWrite=1h,maximumSize=2000
output:
ansi:
enabled: never
我想创建一个新的缓存 cacheC ,它将具有不同的配置。
我该怎么做?谢谢!
解决方法
您可以以编程方式声明许多缓存配置,而不是使用yaml。
类似这样的东西:
@Configuration
@EnableCaching
public class CacheConfig {
public static final String CACHE_A = "cacheA";
public static final String CACHE_B = "cacheB";
public static final String CACHE_C = "cacheC";
@Bean
public CacheManager cacheManagerTicker(Ticker ticker) {
List<Cache> caches = new ArrayList<>();
// Cache A
caches.add(this.buildCache(CACHE_A,ticker,2000L,1L,TimeUnit.HOURS));
// Cache B
caches.add(this.buildCache(CACHE_B,TimeUnit.HOURS));
// Cache C
caches.add(this.buildCache(CACHE_C,3500L,15L,TimeUnit.MINUTES));
SimpleCacheManager cacheManager = new SimpleCacheManager();
cacheManager.setCaches(caches);
return cacheManager;
}
private CaffeineCache buildCache(String cacheName,Ticker ticker,Long maxSize,Long ttl,TimeUnit ttlUnit){
Caffeine<Object,Object> cacheBuilder = Caffeine.newBuilder();
// TTL
if (ttl != null && ttl > 0 && ttlUnit != null){
cacheBuilder.expireAfterWrite(ttl,ttlUnit);
}
// Max size
if (maxSize != null && maxSize > 0){
cacheBuilder.maximumSize(maxSize);
}
// Ticker
cacheBuilder.ticker(ticker);
return new CaffeineCache(cacheName,cacheBuilder.build());
}
@Bean
public Ticker ticker() {
return Ticker.systemTicker();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。