我需要在我的服务中使用多个缓存以实现不同的用途。我正在寻找一种方法来分离它们的配置,如maximumSize和expireAfterWrite。我在部署中使用Spring和Kubernetes。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, 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();
}
}
我使用Spring缓存抽象,定义了多个缓存。有时,当数据更改时,我想逐出多个缓存。是否可以使用Spring的CacheExit注释逐出多个缓存?
我在Tomcat中部署了多个Web应用程序,并在TOMCAT_HOME/lib/exts中共享service jar。所有的应用程序都使用Spring,在服务罐中我有bean,用Spring 3.1缓存注释注释。我使用Ehache提供商。我想有一个单一的CacheManager使用的所有Web应用程序。如果我在Web应用程序级别定义Spring缓存配置,缓存工作,但为每个应用程序/上下文创建单独的
自定义缓存类使用说明 phpGrace 1.2.1 版本新增了自定义缓存类的功能,您可以将某个相同类型的缓存封装为一个类文件,便于项目的复用 (: 实现步骤 在 phpGrace/caches/ 文件夹下创建您的自定义缓存类文件 文件命名规则 : 缓存类名称.php 类命名规则 : class 缓存类名称 extends \cacheBase{} 使用命名空间 : namespace phpG
我有一个测试套件,试图用IgniteCache替换ConcurrentHashMap DS。 我用相同的数据结构创建了一个IgniteCache和一个CacheConfiguration,我希望我的新IgniteCache是这样的。在运行时,它从开始到停止。在调试中,它表明在iGnite.GetOrCreateCache(cfg)上;步骤它抛出NullPointerException ;
我对spring boot中的缓存技术很陌生,我在我的项目中使用了缓存。现在我有一个新的需求,需要设置缓存TTL,并且TTL必须在密钥基础上扩展。 E、 g.如果我将缓存过期时间设置为5分钟,则在缓存过期之前,必须检查传入密钥是否存在于缓存中。如果传入密钥存在于缓存中,则TTL必须延长5分钟,否则应清除或收回缓存,并创建新的缓存。 我希望我清楚我的要求,请提供我的解决方案与完美的例子,适合我的要求
我正在向spring启动项目添加缓存。应用程序。yml包含 @EnableCaching位于主应用程序上,我已将@Cacheable(“cacheName”)添加到该方法中,同一类中的另一个方法不会调用它。 在测试中,我看到缓存是NoOp类型的,而不是咖啡因。我已确保在所有情况下都使用正确的导入(springframework)。我还应该在哪里启用缓存?