@Cacheable 创建的缓存的单独设置
Individual settings for caches created by @Cacheable
因此 Spring 决定放弃 Guava 并引入 Caffeine 缓存支持。感觉支持很有限
使用缓存最简单的方法是使用@Cacheable 注释。一个非常常见的用例是肯定有多个具有不同设置的缓存(例如 long/short lived)。
我不知道该怎么做。事实上,我认为当前的实现是不可能的,这真的让我感到惊讶。
CaffeineCacheManager
被Spring用来动态创建缓存。它有几种设置 Caffeine
、CacheLoader
或 CaffeineSpec
的方法,您可以在其中设置缓存属性。但是,这随后将用于所有创建的缓存,我没有看到只为一个缓存设置属性的方法。
我是不是漏掉了什么?
我现在是这样解决的。我创建了一个问题来使这更容易 here
public class CustomCaffeineCacheManager extends CaffeineCacheManager {
private Map<String, Cache> preDefinedCaches = new ConcurrentHashMap<>();
public void addCache(String name, Cache cache) {
preDefinedCaches.put(name, cache);
}
@Override
protected Cache<Object, Object> createNativeCaffeineCache(String name) {
return preDefinedCaches.getOrDefault(name, super.createNativeCaffeineCache(name));
}
}
在@Configuration class中:
@Bean
public CacheManager cacheManager() {
CustomCaffeineCacheManager caffeineCacheManager = new CustomCaffeineCacheManager();
caffeineCacheManager.addCache("customCache", Caffeine.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.maximumSize(5_000).build());
return caffeineCacheManager;
}
因此 Spring 决定放弃 Guava 并引入 Caffeine 缓存支持。感觉支持很有限
使用缓存最简单的方法是使用@Cacheable 注释。一个非常常见的用例是肯定有多个具有不同设置的缓存(例如 long/short lived)。
我不知道该怎么做。事实上,我认为当前的实现是不可能的,这真的让我感到惊讶。
CaffeineCacheManager
被Spring用来动态创建缓存。它有几种设置 Caffeine
、CacheLoader
或 CaffeineSpec
的方法,您可以在其中设置缓存属性。但是,这随后将用于所有创建的缓存,我没有看到只为一个缓存设置属性的方法。
我是不是漏掉了什么?
我现在是这样解决的。我创建了一个问题来使这更容易 here
public class CustomCaffeineCacheManager extends CaffeineCacheManager {
private Map<String, Cache> preDefinedCaches = new ConcurrentHashMap<>();
public void addCache(String name, Cache cache) {
preDefinedCaches.put(name, cache);
}
@Override
protected Cache<Object, Object> createNativeCaffeineCache(String name) {
return preDefinedCaches.getOrDefault(name, super.createNativeCaffeineCache(name));
}
}
在@Configuration class中:
@Bean
public CacheManager cacheManager() {
CustomCaffeineCacheManager caffeineCacheManager = new CustomCaffeineCacheManager();
caffeineCacheManager.addCache("customCache", Caffeine.newBuilder()
.expireAfterWrite(2, TimeUnit.MINUTES)
.maximumSize(5_000).build());
return caffeineCacheManager;
}