有很多場景,我們都需要刪除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 $port -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 'done'
使用方式:
./redis-del-keys.sh localhost 6379 user:*
表示刪除本機6379端口的redis中user:開頭的所以key。