Redis【知识点】批量删除指定Key
Redis中有删除单条数据的命令DEL但是他没有批量删除多条数据的方法,那我们怎么去批量删除多条数据呢!
第一种方式
/work/app/redis/bin/redis-cli -a youpassword keys 'Volume:*' | xargs /work/app/redis/bin/redis-cli -a youpassword del
注释:
通过:keys 'Volume'去匹配你要删除的Key:Value条目,然后把结果传给xargs然后删除数据
如果要删除指定的Redis库加个参数即可:(-n)一般不建议在Redis中使用多库存储数据!
/work/app/redis/bin/redis-cli -a youpassword -n 0 keys 'Volume:*' | xargs /work/app/redis/bin/redis-cli -a youpassword -n 0 del
这样一个坏处每次都要建立一个连接,量小的话还可以接受,量大的话,效率不行。
第二种方式
/work/app/redis/bin/redis-cli -a youpassword EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 'Volume:*'
注释:
这样的方式,通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本
但这种处理方式,量大的情况下,lua函数unpack会出现问题,会报错误
'''
(error) ERR Error running script (call to f_e177a091510d969af3b388ee986dbe6658df6b57): @user_script:1: user_script:1: too many results to unpack
'''
优化后的第二种方式
/work/app/redis/bin/redis-cli -a youpassword EVAL "local keys = redis.call('keys', ARGV[1]) for i=1,#keys,5000 do redis.call('del', unpack(keys, i, math.min(i+4999, #keys))) end return #keys" 0 'Volume:*'
注释:
实际上是对第二种方式的改进,一次性unpack太多会出问题,那就干脆一次5000吧,这样就不会有问题了!
这段脚本的意思,首先定义一个数组 keys,里面存储了模式匹配的所有的以 ‘Volume:’的key,然后for循环,每次处理5000个key,也就是说每次del 5000个key。
相关脚本:http://www.cnblogs.com/luotianshuai/
注:
KEYS操作在线上是禁止使用的!
Redis是单线程的,如果量很大的话,keys是遍历key的,会导致阻塞,这样其他的客户端就没法连接了!
第三种方式
自从redis2.8以后就开始支持scan命令,模式匹配可以采取下面的形式来批删除大量的key
/work/app/redis/bin/redis-cli -a youpassowrd -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 DEL
结果:
'''
/work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 --scan --pattern "Volume:*" | xargs -L 5000 /work/app/redis/bin/redis-cli -a youpassword -n 0 -p 6379 DEL
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 5000
(integer) 207
'''
参考晓兄博客:https://www.18188.org/articles/2016/04/06/1459930096140.html
Redis【知识点】批量删除指定Key的更多相关文章
- 动态SQL实现批量删除指定数据库的全部进程
动态SQL实现批量删除指定数据库的全部进程 DECLARE @DatabaseName nvarchar(100) SET @DatabaseName = N'Account_006_Kaikei_2 ...
- Python批量删除指定目录下的指定类型的文件
Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...
- Redis登陆服务器和批量删除指定的key
ps -ef |grep redis cd /opt/app/redis/bin ./redis-cli -h 192.168.0.67 -p 7001 -a 'hub2c!Redis'./redis ...
- redis 通配符 批量删除key
Redis 中 DEL指令支持多个key作为参数进行删除 但不支持通配符,无法通过通配符批量删除key,不过我们可以借助 Linux 的管道和 xargs 指令来完成这个动作. 比如要删除所有以use ...
- Hbase如何批量删除指定数据
有时我们需要批量删除一些hbase中符合某些条件的数据,本文提供一种简单的shell命令的方式批量删除hbase里的数据.思路就是,建立hive与hbase的关联表,通过hive sql查询出符合条件 ...
- 【大数据】Hbase如何批量删除指定数据
一.起因: Hbase是一个列式存储,nosql类型的数据库,类似mongodb. 目前似乎没有提供批量删除的方法,只有一个单行删除的命令:deleteall 'tablename', rowkey ...
- mysql批量删除指定前缀或后缀表
今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了 ...
- window下批量删除指定后缀文件
例子: 批量删除当前路径下后缀为 .jpg和 .json del /a /f /s /q "*.jpg" "*.json" *为通配符/a /f 是强制删除所有 ...
- Redis 通配符批量删除key
问题: 线上有部分的redis key需要清理. 一. 由于Keys模糊匹配,请大家在实际运用的时候忽略掉.因为Keys会引发Redis锁,并且增加Redis的CPU占用,情况是很恶劣的, 官网说明如 ...
随机推荐
- PHP+Apache+Zend Studio+MySql+Navicat+phpAdmin
本文章介绍整个PHP开发环境的搭建 数据库:MySql 5.5.50 数据库软件:Navicat 11.1.20和phpAdmin 4.6.5.1任选 php库:PHP 7.0.13 服务器:Apa ...
- Xamarin Error cannot find ‘aapt.exe’
Problem: solution: A workaround is to copy your files to the old directory. Just copy the aapt ...
- phpqrcode 生成二维码
这个项目需要根据信息来自动生成二维码,到网上搜了下,发现php有生成二维码的类库phpqrcode,所以打算就用这个来生成二维码 从官网下载类库源码http://sourceforge.net/pro ...
- ACM练手
#include<iostream> #include<string.h> using namespace std; #define N 100 class stack { c ...
- 【2016-10-28】【坚持学习】【Day15】【MongoDB】【初识】
其实公司产品一直有使用mongodb,只不过我一直没有接触这一块,也没有主动的了解.实在说不过去.于是,准备写几个文章,认真学习一下它. 今天花了几个小时学习了入门 定义: 非关系型数据库, NoSQ ...
- Flask入门1-HelloWorld
Flask是基于Python的轻量级Web开发框架,本文简述其构建web用用的基本步骤,以下内容默认开发环境为Ubuntu14.04. 本文参考Flask官方建教程翻译并整理:http://flask ...
- CF732D. Exams[二分答案 贪心]
D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- 第15章 LinkedList类(暂无)
第15章 LinkedList类 LinkedList类是
- Struts2 自定义MVC框架
一.Model1与Model2: Model1:就是一种纯jsp开发技术,将业务逻辑代码和视图渲染代码杂糅在一起. Model2:Model2是在Model1的基础上,将业务逻辑的代码分离开来,单独形 ...
- 由于log太多导致ubuntu硬盘空间满了,进入不了系统解决办法
具体现象是在图形界面输入用户名和密码之后,再次提示需要输入用户名和密码. 步骤一:按快捷键进入命令行界面.ctrl+alt+f1. 步骤二:清空文件 clear log cd /var/log sud ...