gpt4 book ai didi

java - 如何在不覆盖默认 spring-cache 的情况下创建辅助 CacheManager

转载 作者:行者123 更新时间:2023-11-30 05:49:42 27 4
gpt4 key购买 nike

我的 application.yml 中有一个默认的 redis 缓存配置:

cache:
type: redis
redis:
time-to-live: 7200000 # 2 hour TTL - Tune this if needed later
redis:
host: myHost
port: myPort
password: myPass
ssl: true
cluster:
nodes: clusterNodes
timeout: 10000

它工作得很好,我不想为它创建任何自定义缓存管理器。

但是,我的代码中有一些缓存不需要使用 redis。出于这个原因,我想制作第二个 CacheManager,它是一个简单的 ConcurrentHashMap 并使用 @Cacheable 指定它

为此,我创建了一个新的 CacheManager Bean:


@Configuration
@EnableCaching
@Slf4j
class CachingConfiguration {

@Bean(name = "inMemoryCache")
public CacheManager inMemoryCache() {
SimpleCacheManager cache = new SimpleCacheManager();
cache.setCaches(Arrays.asList(new ConcurrentMapCache("CACHE"));
return cache;
}

}

这导致 inMemoryCache 成为我的默认缓存,而我的所有其他 @Cacheable() 都尝试使用 inMemoryCache。我不希望我创建的 CacheManager bean 成为我的默认值。无论如何我可以指定它是次要的并且不阻止 spring-cache 做它的魔法吗?

谢谢!

最佳答案

我能够保留 yml 中的默认 Redis 配置,并使用以下代码添加一个新的 inMemory CacheManager(我使用的是 Clustered Redis):

    @Bean
@Primary
public RedisCacheManager redisCacheManager(LettuceConnectionFactory lettuceConnectionFactory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
redisCacheConfiguration.usePrefix();


return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(lettuceConnectionFactory)
.cacheDefaults(redisCacheConfiguration).build();
}

@Bean
public LettuceClusterConnection getConnection(LettuceConnectionFactory lettuceConnectionFactory) {
LettuceClusterConnection clusterConnection = (LettuceClusterConnection) lettuceConnectionFactory.getClusterConnection();
return clusterConnection;
}


@Bean(name = "inMemoryCache")
public CaffeineCacheManager inMemoryCache() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager();
cacheManager.setCaffeine(caffeineCacheBuilder());
return cacheManager;
}

Caffeine< Object, Object > caffeineCacheBuilder() {
return Caffeine.newBuilder()
.initialCapacity(3000)
.maximumSize(40000)
.expireAfterAccess(30, TimeUnit.MINUTES);
}

关于java - 如何在不覆盖默认 spring-cache 的情况下创建辅助 CacheManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com