spring的redis注解清除指定前缀的数据@CacheEvict
在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相关推荐
- @Accessors注解作用指定前缀遵守驼峰命名
Accessors翻译是存取器.通过该注解可以控制getter和setter方法的形式. @Accessors(fluent = true) 使用fluent属性,getter和setter方法的方法 ...
- spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. @Cacheable是用来声明方法是可缓存的.将结果存储到缓存中以便后续使用相同参数调用时不需执行实 ...
- spring cache相关注解介绍 @Cacheable、@CachePut、@CacheEvict
Cacheable CachePut CacheEvict annotation CacheConfig 开启缓存注解 @Cacheable @Cacheable是用来声明方法是可缓存的.将结果存储到 ...
- Spring XML 和 注解形式指定init 、destory方法
XML形式 <bean class="you.class" init-method="initMethod", destroy-method=" ...
- Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
文章目录 一.概述 二.缓存注解种类 三.优劣势说明 四.如何使用? 五.详细介绍介绍 1)@Cacheable(常用) 1.value/cacheNames 属性 2.key属性 3.keyGene ...
- maven整合@data注解_springboot整合spring Cache(redis)
前言 前面有介绍过spring整合redis和redis的一些注意点,在实际开发中,spring cache方便简化的缓存操作的大部分内容.通过注解的方式实现缓存. 缓存抽象的核心是将缓存应用于Jav ...
- 搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80785403 为了提高性能,减少数据库的压力,使用 ...
- spring boot 注解_Spring-Boot项目中如何配置redis注解缓存?
在pom中添加redis缓存支持依赖 <dependency><groupId>org.springframework.boot</groupId><arti ...
- Redis中通过bat获取指定前缀开头的所有键值对并输出保存到文件中
场景 需求是查看某一个服务器上的redis的某命名空间(指定前缀开头)的所有键值对的 key和value的数据格式,但是这个服务器上没法连接外网,只能在redis服务端所在 目录下通过bat脚本获取所 ...
最新文章
- Redis笔记(六):Java中使用Redis
- 江苏省专转本计算机题知识点,江苏专转本计算机真题17
- 基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis
- win7-64bit安装comtypes的问题
- bios uefi legacy_安装win10用uefi还是legacy?win10 uefi引导修复教程
- 生成可编辑的pdf(可java代码动态赋值)
- 6 个主流 AI 聊天机器人平台
- Maven之(五)Maven仓库
- 用计算机数字唱歌,悬赏跪求计算器各种歌曲数字谱(最好带和音)
- 阿里云【达摩院特别版·趣味视觉AI训练营】笔记2
- 2017年搜狗校招Java研发笔试编程题
- 使用js调用设备摄像头并实现拍照
- 如何划分程序员的等级
- 计算机组装职高必背,(完整word版)职高计算机组装与维护教案.doc
- 只能输入中文,及中文标点符号正则/只能输入英文,及英文标点符号正则
- 虚拟机vn登陆服务器系统,虚拟机搭建windows服务器
- 不瞎忙的人生,需要做对五件事
- Jenkins在windows下的安装和部署
- 前端js分享插件运用(空间,QQ,微信,微博,豆瓣)
- php框架怎学,怎么学php,怎么学php框架,SAF框架介绍 | 璞玉(POOY)
热门文章
- 半导体内存设计(上)
- 图文并茂的介绍用word生成一个很智能的目录
- 初识Protobuf协议
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何使用断点
- 如何自动配置项目版本?只需一个简单的服务
- linux C++通讯架构实战课程
- 有关Slackware的USB安装介绍
- 【HTML】标签简单融合运用
- 职称评审还要考职称英语和职称计算机吗,广州中级经济师职称评审,需要考职称英语和职称计算机吗?是否还要发表论文?...
- 【机器学习/数据分析大项目】黑色星期五销售预测(详细报告)