[英]Why isn't my Redis cache working in my Spring-Boot/Spring-Data application?
[英]Why Redis Cache is not getting empty in my Spring Boot application?
我在我的 Spring 引导应用程序中使用 Redis 缓存来存储多个 rest API 的数据。
我正在使用 Spring Cron 作业定期清除 Redis 缓存。 该方法在所需的时间段被调用。
我已经验证了日志,但缓存并没有变得清晰,因此它显示的是陈旧的数据。
我试图清除缓存的代码。
public class CustomerDerivation {
@Autowired
@Qualifier("redisCacheMngr")
CacheManager redisCacheMngr;
@Scheduled(cron = "${redis.api.update.interval}")
@CacheEvict(value = "redis-cache", allEntries = true, cacheNames = {"redis-cache"})
protected void cacheEvict() {
redisCacheMngr.getCache("redis-cache").clear();
logger.info("Evicting ModelCache");
}
}
自定义缓存配置代码。
@Configuration
@Profile("cloud")
public class CacheConfig extends AbstractCloudConfig {
@Autowired
Environment env;
@Bean
public RedisConnectionFactory brRedisFactory() {
return connectionFactory().redisConnectionFactory(env.getProperty("model_cache_name"));
}
@Bean
public RedisTemplate<String, Object> brRedisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(brRedisFactory());
return redisTemplate;
}
@Bean(name = "redisCacheMngr")
public CacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(brRedisTemplate());
cacheManager.setUsePrefix(true);
cacheManager.setTransactionAware(true);
return cacheManager;
}
}
如何修复清除 redis 缓存的代码?
1)您是否使用@EnableCaching 注释启用了缓存? 2) 为什么在同一个方法中使用@CacheEvict 和clear()? 两者服务于相同的目的。 使用其中之一。
检查以下内容:
问候。
我在我的 Spring 引导应用程序中使用 Redis 缓存来存储多个 rest API 的数据。
我正在使用 Spring Cron Jobs 定期清除 Redis 缓存。 该方法在所需的时间段被调用。
我已经验证了日志,但缓存没有变得清晰,因此它显示的是过时的数据。
我试图清除缓存的代码。
public class CustomerDerivation {
@Autowired
@Qualifier("redisCacheMngr")
CacheManager redisCacheMngr;
@Scheduled(cron = "${redis.api.update.interval}")
@CacheEvict(value = "redis-cache", allEntries = true, cacheNames = {"redis-cache"})
protected void cacheEvict() {
redisCacheMngr.getCache("redis-cache").clear();
logger.info("Evicting ModelCache");
}
}
自定义缓存配置代码。
@Configuration
@Profile("cloud")
public class CacheConfig extends AbstractCloudConfig {
@Autowired
Environment env;
@Bean
public RedisConnectionFactory brRedisFactory() {
return connectionFactory().redisConnectionFactory(env.getProperty("model_cache_name"));
}
@Bean
public RedisTemplate<String, Object> brRedisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(brRedisFactory());
return redisTemplate;
}
@Bean(name = "redisCacheMngr")
public CacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(brRedisTemplate());
cacheManager.setUsePrefix(true);
cacheManager.setTransactionAware(true);
return cacheManager;
}
}
如何修复代码以清除 redis 缓存?
Spring 使用 Spring AOP(面向切面编程)实现缓存,这意味着您必须在cacheEvict()
方法上使用public
访问级别,以便它可以被 AOP 代理拦截。 否则就像你从不使用@CacheEvict
注释你的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.