spring cache 实现按照*号删除缓存
spring cache redis的使用过程中,删除缓存只能用具体的key删除,不能使用通配符号,原因是redis不支持del key这种通配符用法,可以通过修改redis源代码实现,但这种方式修改了redis本身代码,后期升级、维护不好操作,具体操作方式可以参见:
redis del命令支持正则删除(pattern)git地址:redis-del-with-pattern
我们使用改写spring-redis cache实现
具体实现方式为:
改写:org.springframework.data.redis.cache.RedisCache下的evict方法
原为:cacheWriter.remove(name, createAndConvertCacheKey(key));
改为:cacheWriter.clean(name, createAndConvertCacheKey(key));
spring redis最底层是支持了通配符的方式的,但是经过包装后就去掉了
具体在项目中的使用实例如:
在查询方法上加入缓存:
@Override @Cacheable(keyGenerator = "cacheKeyGenerator") public List query(xx x) throws IllegalAccessException { return xxxx; }
其中cacheKeyGenerator生成如com.demo.service.impl.xxServiceImpl-query-99986a
删除或更新时:
@Override @CacheEvict(key = "targetClass.name+'-*'") public boolean saveOrUpdate(xx x) { return xxxx; }
其中key时spEL表达式,生成 com.demo.service.impl.xxServiceImpl-*
的key
最终效果是在新增或更新时能删除所有列表的缓存key
相关推荐
wangzhaotongalex 2020-10-20
LuckyLXG 2020-09-08
xuanlvhaoshao 2020-06-16
Justdoit00 2020-06-08
wozijisunfly 2020-06-01
lishaokang 2020-05-10
citic 2020-05-03
bluetears 2020-04-22
jiedinghui 2020-04-20
hithyc 2020-04-17
SoarFly00 2020-02-19
福叔 2020-02-11
xuanlvhaoshao 2020-02-10
lishaokang 2020-01-25
impress 2019-12-31
Laozizuiku 2019-12-29