刪除redis中指定key模式的資料的shell指令碼
阿新 • • 發佈:2020-09-08
有很多場景,我們都需要刪除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/null2>&1 fi done done echo 'done'
使用方式:
./redis-del-keys.sh localhost 6379 user:*
表示刪除本機6379埠的redis中user:開頭的所以key。