1. 程式人生 > 實用技巧 >刪除redis中指定key模式的資料的shell指令碼

刪除redis中指定key模式的資料的shell指令碼

有很多場景,我們都需要刪除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。