#!/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 $port -c scan $cursor count 1000 match $pattern) ##以换行作为分隔符 IFS=$' ' #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 ##批量把值设置为10,批量设置请把批量删除的注释掉 redis-cli -h $host -p $port -c set $key 10 >/dev/null 2>&1 ##批量删除key,批量删除请把批量设置的注释掉
redis-cli -h $host -p $port -c del $key >/dev/null 2>&1 fi done done echo 'done'
使用方式:
./redis-batch-keys.sh localhost 6379 aaa*
表示删除本机6379端口的redis中aaa开头的所有key 或者 批量设置本机6379端口的redis中aaa开头的所有key的值为10