【实用脚本】批量删除Redis中指定Key方法

TangLu 未命名 2021-07-19 3229 0

一、脚本背景

某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数量

1.png


2、正常删除

2.png


3、确认删除结果

3.png

评论