我们都需要删除redis中某些具有相似特征的key,即使是线上环境也是。如果key数量很小容易处理,如果这些key很多很多,必须通过scan命令循环扫描一一删除,如果直接执行keys命令会堵死redis服务。下面这个脚本就是通过循环扫码key再删除,直至结束。
-
redis-del-keys.sh
-
-
#!/bin/bash
-
##redis主机IP
-
host=$1
-
##redis端口
-
port=$2
-
##key模式
-
pattern=$3
-
##游标
-
cursor=0
-
##退出信号
-
signal=0
-
-
##循环获取key并删除
-
while [ $signal -ne 1 ]
-
do
-
echo "cursor:${cursor}"
-
sleep 2
-
##将redis scan得到的结果赋值到变量
-
re=$(redis-cli -h $host -p $p -c scan $cursor count 1000 match $pattern)
-
##以换行作为分隔符
-
IFS=$'\n'
-
#echo $re
-
echo 'arr=>'
-
##转成数组
-
arr=($re)
-
##打印数组长度
-
echo 'len:'${#arr[@]}
-
##第一个元素是游标值
-
cursor=${arr[0]}
-
##游标为0表示没有key了
-
if [ $cursor -eq 0 ];then
-
signal=1
-
fi
-
##循环数组
-
for key in ${arr[@]}
-
do
-
echo $key
-
if [ $key != $cursor ];then
-
echo "key:"$key
-
##删除key
-
redis-cli -h $host -p $port -c del $key >/dev/null 2>&1
-
fi
-
done
-
done
-
echo
/redis-del-keys.sh localhost 6379 user:*
表示删除本机6379端口的redis中user:开头的所以key。
阅读(4580) | 评论(0) | 转发(0) |