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

原文 

https://segmentfault.com/a/1190000018066055

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » spring cache 实现按照*号删除缓存

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址