Springboot @CacheEvict的默认实现,如果allEntries = true,则使用Redis KEYS命令来清除缓存。在生产环境中,Redis通常建议使用配置文件的方式禁用keys命令,因为这种方式相对安全且易于管理,所以在代码中尽量避免使用KEYS命令,避免造成一些不必要的麻烦。
报错信息如下:
在项目中引入了第三方包,使用了 @CacheEvict注解,第一:无权限解除Redis禁用KEYS,第二:无法修改第三方包的源码的情况下,在新版本中springBoot提供了配置Scan的方法
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration defaultCacheConfig =RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration
.ofMinutes(Long.valueOf(10))).disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter
(connectionFactory,
BatchStrategies.scan(1000))).cacheDefaults(defaultCacheConfig).transactionAware().build();
return cacheManager;
}