我在Spring启动应用程序中使用Redis缓存抽象。 经历了许多事情我已经达到了一个要求, 我想基于某些配置启用或禁用缓存。 以下是我使用缓存的代码:
@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
有没有办法根据配置完全禁用缓存?
这样在我使用Site Date Present Absent Not Responded
BAY 2015-08-02 1 0 0
BAY 2015-08-02 1 1 0
BAY 2015-08-03 1 1 0
BIS 2015-08-03 1 0 0
的第一个代码中,代码应该直接从数据库中获取数据
请建议。
答案 0 :(得分:0)
是的,您可以使用配置控制缓存抽象。但它将根据配置设置完全启用或完全禁用。这是执行相同操作的代码段。 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;
}
}