在redis中我们有时候需要清除掉指定前缀的数据。但是在spring的redis注解默认配置使用上好像并没有清除指定前缀的数据,如下我们来举例如何使用@CacheEvict清除指定前缀的数据。

    @CacheEvict(value = "default",key = "'Resources*'",unless = "#result == false ")@Overridepublic Boolean deleteByPrimaryKey(String id){}

  当前操作是删除Resources为前缀的所有redis数据。但是执行是失败的,失败的原因是没有这个key。
  很明显,注解并没有将这个key当作一个前缀来处理而是当作了一个key来处理,所以导致的就是无法找到这个key。
  所以我们要做的就是,修改注解解析,在解析注解的时候使他默认识别这个前缀。

1> 第一种方法 修改配置

  我们在配置redis缓冲管理器的时候会配置一个RedisCacheWriter,我们默认使用的实现类是org.springframework.data.redis.cache.DefaultRedisCacheWriter,而这个删除注解执行的时候会执行这个类里面的remove方法,所以们只需要对这个remove方法进行修改就可以了(重写这个类,并重新进行实例化)。

修改前

 /** (non-Javadoc)* @see org.springframework.data.redis.cache.RedisCacheWriter#remove(java.lang.String, byte[])*/@Overridepublic void remove(String name, byte[] key) {Assert.notNull(name, "Name must not be null!");Assert.notNull(key, "Key must not be null!");execute(name, connection -> connection.del(key));}

修改后

    /** (non-Javadoc)* @see org.springframework.data.redis.cache.RedisCacheWriter#remove(java.lang.String, byte[])*//*** Description :删除,原来是删除指定的键,目前修改为既可以删除指定键的数据,也是可以删除某个前缀开始的所有数据* @param* @return* @exception* @author     :loulan* */@Overridepublic void remove(String name, byte[] key) {Assert.notNull(name, "Name must not be null!");Assert.notNull(key, "Key must not be null!");execute(name, connection -> {// 获取某个前缀所拥有的所有的键,某个前缀开头,后面肯定是*Set<byte[]> keys = connection.keys(key);int delNum = 0;for (byte[] keyByte : keys) {delNum += connection.del(keyByte);}return delNum;});}

  如果key里面带有*,那么就会被keys去查询以其前缀为值得所有key,然后再把这些key得数据全部进行删除。这样原来得注解方式不用改动就可以生效了。

2> 第二种方法,修改属性cacheResolver,自定义解析程序

  这种方式有些麻烦,自己也没有进行测试,有做过得请分享一下。

注解得使用

spring的redis注解清除指定前缀的数据@CacheEvict相关推荐

  1. @Accessors注解作用指定前缀遵守驼峰命名

    Accessors翻译是存取器.通过该注解可以控制getter和setter方法的形式. @Accessors(fluent = true) 使用fluent属性,getter和setter方法的方法 ...

  2. spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. @Cacheable是用来声明方法是可缓存的.将结果存储到缓存中以便后续使用相同参数调用时不需执行实 ...

  3. spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict

    Cacheable CachePut CacheEvict annotation CacheConfig 开启缓存注解 @Cacheable @Cacheable是用来声明方法是可缓存的.将结果存储到 ...

  4. Spring XML 和 注解形式指定init 、destory方法

    XML形式 <bean class="you.class" init-method="initMethod", destroy-method=" ...

  5. Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项

    文章目录 一.概述 二.缓存注解种类 三.优劣势说明 四.如何使用? 五.详细介绍介绍 1)@Cacheable(常用) 1.value/cacheNames 属性 2.key属性 3.keyGene ...

  6. maven整合@data注解_springboot整合spring Cache(redis)

    前言 前面有介绍过spring整合redis和redis的一些注意点,在实际开发中,spring cache方便简化的缓存操作的大部分内容.通过注解的方式实现缓存. 缓存抽象的核心是将缓存应用于Jav ...

  7. 搞懂分布式技术14:Spring Boot使用注解集成Redis缓存

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80785403 为了提高性能,减少数据库的压力,使用 ...

  8. spring boot 注解_Spring-Boot项目中如何配置redis注解缓存?

    在pom中添加redis缓存支持依赖 <dependency><groupId>org.springframework.boot</groupId><arti ...

  9. Redis中通过bat获取指定前缀开头的所有键值对并输出保存到文件中

    场景 需求是查看某一个服务器上的redis的某命名空间(指定前缀开头)的所有键值对的 key和value的数据格式,但是这个服务器上没法连接外网,只能在redis服务端所在 目录下通过bat脚本获取所 ...

最新文章

  1. Redis笔记(六):Java中使用Redis
  2. 江苏省专转本计算机题知识点,江苏专转本计算机真题17
  3. 基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis
  4. win7-64bit安装comtypes的问题
  5. bios uefi legacy_安装win10用uefi还是legacy?win10 uefi引导修复教程
  6. 生成可编辑的pdf(可java代码动态赋值)
  7. 6 个主流 AI 聊天机器人平台
  8. Maven之(五)Maven仓库
  9. 用计算机数字唱歌,悬赏跪求计算器各种歌曲数字谱(最好带和音)
  10. 阿里云【达摩院特别版·趣味视觉AI训练营】笔记2
  11. 2017年搜狗校招Java研发笔试编程题
  12. 使用js调用设备摄像头并实现拍照
  13. 如何划分程序员的等级
  14. 计算机组装职高必背,(完整word版)职高计算机组装与维护教案.doc
  15. 只能输入中文,及中文标点符号正则/只能输入英文,及英文标点符号正则
  16. 虚拟机vn登陆服务器系统,虚拟机搭建windows服务器
  17. 不瞎忙的人生,需要做对五件事
  18. Jenkins在windows下的安装和部署
  19. 前端js分享插件运用(空间,QQ,微信,微博,豆瓣)
  20. php框架怎学,怎么学php,怎么学php框架,SAF框架介绍 | 璞玉(POOY)

热门文章

  1. 半导体内存设计(上)
  2. 图文并茂的介绍用word生成一个很智能的目录
  3. 初识Protobuf协议
  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何使用断点
  5. 如何自动配置项目版本?只需一个简单的服务
  6. linux C++通讯架构实战课程
  7. 有关Slackware的USB安装介绍
  8. 【HTML】标签简单融合运用
  9. 职称评审还要考职称英语和职称计算机吗,广州中级经济师职称评审,需要考职称英语和职称计算机吗?是否还要发表论文?...
  10. 【机器学习/数据分析大项目】黑色星期五销售预测(详细报告)