我在Spring应用程序中使用Redis Cache存储多个rest的数据。
我使用定期清除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缓存?
发布于 2020-06-08 04:53:41
1)您是否使用@EnableCaching注释启用了缓存? 2)为什么在相同的方法中使用@CacheEvict和clear()?两者都有相同的目的。用他们中的一个。
发布于 2020-06-08 14:46:37
检查以下内容:
致以问候。
发布于 2020-06-10 19:18:35
Spring使用Spring (面向方面编程)来实现缓存,这意味着您必须在您的public方法上使用public访问级别,以便可以被AOP代理截获。否则,就像您从未用@CacheEvict注释过您的方法一样。
https://stackoverflow.com/questions/62212774
复制相似问题