gpt4 book ai didi

java - 根据某些配置参数从代码中禁用缓存抽象

转载 作者:可可西里 更新时间:2023-11-01 11:36:52 24 4
gpt4 key购买 nike

我在我的 Spring 启动应用程序中使用 Redis 缓存抽象。经历了很多事情我已经达到了一个要求,我想根据某些配置启用或禁用缓存。以下是我使用缓存的代码:

@Override
@Cacheable(value = IC_CACHE, key = "#id")
public IssueCategory getIssueCategoriesById(Integer id) {
return issueCategoriesRepo.findById(id);
}

下面是我的配置方式:

  @Bean
public RedisConnectionFactory redisConnectionFactory(@Value("${redis.host}") String redisHost,
@Value("${redis.port}") Integer redisPort) {
JedisConnectionFactory cf = new JedisConnectionFactory();
cf.setHostName(redisHost);
cf.setPort(redisPort);
return cf;
}

@Bean(name = "redisTemplate")
RedisTemplate<Object,Object> redisTemplate() {
final RedisTemplate<Object,Object> template = new RedisTemplate<Object,Object>();
template.setConnectionFactory(applicationContext.getBean(RedisConnectionFactory.class));
return template;
}

@Bean
public CacheManager cacheManager() {
RedisCacheManager redisCacheManager = new PieRedisCacheManager(
(RedisTemplate<?, ?>) applicationContext.getBean("redisTemplate"));
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
}

假设我在属性文件中有一个变量:

rediscache=disable

有没有办法根据该配置完全禁用缓存?

所以在我使用@cacheable的第一个代码中,代码应该直接从数据库中获取数据

请指教。

最佳答案

是的,您可以使用配置来控制缓存抽象。但它会根据配置设置完全启用或完全禁用。这是执行相同操作的代码片段。 NoOpCacheManager 是一种禁用缓存的方法,即使您的代码中有 @Cacheable 参数也是如此。

@Value("${rediscache}")
private String isRedisCacheEnabled;

@Bean
public CacheManager cacheManager() {
if(isRedisCacheEnabled) {
RedisCacheManager redisCacheManager = new PieRedisCacheManager(
(RedisTemplate<?, ?>) applicationContext.getBean("redisTemplate"));
redisCacheManager.setUsePrefix(true);
return redisCacheManager;
} else {
NoOpCacheManager noopCacheManager = new NoOpCacheManager();
return noopCacheManager;
}
}

关于java - 根据某些配置参数从代码中禁用缓存抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31825274/

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