在spring boot上基于maven使用redis——批量匹配并删除 (二)
一、背景
在搭建了项目之后,由于需要通过触发动作,并删除redis中多个key。
二、思路
在查询了jedis并没有类似的删除方法之后,事情就变得清晰起来。完成上述任务,分为两个步骤,第一,找到要删除的key;第二删除掉他们。
三、 解决方法
从找到要删除的key来说,有两种方法,一种是通过jedis的keys方法来获得;另外一种是通过scan方法获得。
使用keys方法,寻找包含指定参数的key,其中“*”是匹配符,要是想找前缀就在其后加*,要是找后缀就在传入参数后面加*,而要是图省事方便,前后加*即可。
public Set<String> queryKeys(String key) {
Jedis jedis = jedisPool.getResource();
StringBuilder paramKey = new StringBuilder("*").append(key).append("*");
Set<String> keys = jedis.keys(paramKey.toString());
return keys;
}
使用scan方法,寻找包含指定参数的key,其中 第一,需要构建ScanParams(redis.clients.jedis.ScanParams);第二,主要是填充两个参数第一个是match,标明需要匹配的字符串,第二个是count标明要扫描出多少个来,我这里写的是1000,因为目前库中keys远小于1000,相当于全找出来;第三jedis中的部分scan方法是@Deprecated的不建议使用。
在获得结果集之后,转换出来即可
public List<String> queryKeys(String key) {
Jedis jedis = jedisPool.getResource();
// 存入键值对
ScanParams scanParams = new ScanParams();
StringBuilder paramKey = new StringBuilder("*").append(key).append("*");
scanParams.match(paramKey.toString());
scanParams.count(1000);
ScanResult<String> sr = jedis.scan("0", scanParams);
List<String> a = sr.getResult();
return a;
}
因为,大家都知道keys的方法会阻塞单线程的redis 在keys少的时候,无所谓,但是在keys多的时候,这个就会是很大的隐患。我们采用redis 就是为了其查询速度快。所以,决定采取后者scan的方法实现
public void delStrings(String key) {
try {
Jedis jedis = jedisPool.getResource();
// 存入键值对
ScanParams scanParams = new ScanParams();
StringBuilder paramKey = new StringBuilder("*").append(key).append("*");
scanParams.match(paramKey.toString());
scanParams.count(1000);
ScanResult<String> sr = jedis.scan("0", scanParams);
List<String> a = sr.getResult();
for (String delkey : a) {
jedis.del(delkey);
}
jedis.close();
} catch (Exception e) {
// TODO: handle exception
}
}
四 MAVEN的依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
五、后记
还是写代码有意思
ScanParams
在spring boot上基于maven使用redis——批量匹配并删除 (二)的更多相关文章
- MAC系统下用Idea创建spring boot工程 基于maven
1.创建项目 打开idea编辑器,选择file -> new -> project 点击next 依次填入group,artifact 填写完成之后再点击“next” 根据自己的需求在最 ...
- Spring Boot 2.x 缓存应用 Redis注解与非注解方式入门教程
Redis 在 Spring Boot 2.x 中相比 1.5.x 版本,有一些改变.redis 默认链接池,1.5.x 使用了 jedis,而2.x 使用了 lettuce Redis 接入 Spr ...
- 阿里P7级教你如何在Spring Boot应用程序中使用Redis
在Spring Boot应用程序中使用Redis缓存的步骤: 1.要获得Redis连接,我们可以使用Lettuce或Jedis客户端库,Spring Boot 2.0启动程序spring-boot-s ...
- springboot(十七):使用Spring Boot上传文件
上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...
- (转)Spring Boot(十七):使用 Spring Boot 上传文件
http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...
- Spring Boot(十七):使用Spring Boot上传文件
Spring Boot(十七):使用Spring Boot上传文件 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 一.pom包配置 <parent> ...
- 使用Spring Boot上传文件
原文:http://www.cnblogs.com/ityouknow/p/8298344.html 上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spri ...
- Spring Boot(十七):使用 Spring Boot 上传文件
上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 ...
- Spring Boot上传文件(带进度条)
Spring Boot 上传文件(带进度条)# 配置文件 spring: freemarker: template-loader-path: classpath:/static/ ##Spring B ...
随机推荐
- PAT——1036. 跟奥巴马一起编程
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正 ...
- js获取当前时间并转化
1.转化为 年月日 function getNowFormatDate() { var date = new Date(); var seperator1 = "-"; var ...
- mysql数据库的导入导出命令
1.备份一个数据库 mysqldump -h localhosot -uroot -ppassword 数据库名>数据库所在路径(路径+数据库名.sql) 注意:导出的数据库文件.sql文件不能 ...
- mac 装5.6版本mysql 设置密码
最的mysql在装的时候就可以设置 ,但是低版本的好像不行,需要在装了以后才能设置. mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@ ...
- 关于alias同时使用多个命令小记。
为了方便自己快速使用命令,接触了一下alias.在使用多个命令时,一般有两种方式.各有不同 根据需求选择. 直接上代码: 1.alias Name='(date;pwd;cmd1;cmd2) 写法简洁 ...
- ajax与jsonp定义及使用方法
ajax 定义 ajax技术的目的是让javascript发送http请求,与后台通信,获取数据和信息. ajax通信的过程不会影响后续javascript的执行,从而实现异步. 同步和异步 现实生活 ...
- Vue使用moment.js处理前端时间格式问题
使用moment.js处理格式显示问题: 1.首先引入moment.js插件 npm install moment --save 2.入口文件main.js中导入并使用 3.在项目中使用即可:data ...
- PHP分页函数 学习笔记
function smarty_function_assign_debug_info($params, &$smarty){ $assigned_vars = $smarty->_tpl ...
- 09-if判断语句
https://www.liaoxuefeng.com/ 廖雪峰的官方网站 hm_01_判断年龄.py 1 #!/usr/bin/env python3 # coding=utf-8 def mai ...
- git如何到精通
git教程 目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式 ...