我需要在服务中使用多个缓存以用于不同的用途。 我正在寻找一种方法来分隔其配置,例如 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 ,它将具有不同的配置。
我该怎么做?谢谢!
答案 0 :(得分:1)
您可以以编程方式声明许多缓存配置,而不是使用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, ticker, 2000L, 1L, TimeUnit.HOURS));
// Cache C
caches.add(this.buildCache(CACHE_C, ticker, 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();
}
}