【实用脚本】批量删除Redis中指定Key方法
一、脚本背景
某Redis实例中存放了大量客户登录态数据,现需要批量删除以user_session:开头的key,但是Redis本身并不支持使用通配符进行批量删除,所以需要结合脚本进行操作
二、脚本内容
1、如果Key名称无转义符
Key名如果是有规则、无转义符,可以通过管道命令直接删除,命令如下(请根据实际情况替换IP、Key名)
redis-cli -h 192.168.1.100 -a 123456 -n 9 keys user_session* | xargs redis-cli -h 192.168.1.100 -a 123456 -n 9 del
2、如果Key名称包含转义符
如果Key名包含了转义符,通过管道删除并不能生效,观察interger返回为0,故需结合Shell脚本后进行处理
· 方法1
1、导出需要清理的Key
redis-cli -h 192.168.1.100 -a 123456 keys user_session* > /tmp/keys.txt
2、使用for循环遍历删除,运行过程中interger为1代表正常删除
#!/bin/bash for i in `cat /tmp/keys.txt` do redis-cli -h 192.168.1.100 -a 123456 del $i done
· 方法2
因为KEYS命令时间复杂度为O(n),如果扫描的数据量特别大的话会阻塞Redis主线程。而SCAN命令会将遍历操作分解成m次,时间复杂度为O(1),避免了使用keys命令导致遍历大量数据而阻塞Redis的情况
redis-cli -h 192.168.1.100 -a 123456 -n 1 --scan --pattern "[key前缀]*" | xargs -L 1000 redis-cli -h 192.168.1.100 -a 123456 -n 1 del
三、清理过程
1、统计清理前Key数量
2、正常删除
3、确认删除结果
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论