批量刪除redis特殊鍵值
阿新 • • 發佈:2019-01-10
#!/usr/bin/env bash
#定義redis 叢集陣列
cluster=("master" "node1" "node2")
#定義redis叢集例項開放埠
port=(7000 7001 7002)
#獲取指定型別鍵值的資料
function count(){
count=0
while read LINE
do
((count=count+1))
done < PVKEYS.txt
echo "pvid 的數量為: $count"
}
#呼叫redis刪除命令刪除redis多餘鍵值的資料
function del(){
while read LINE
do
var=`echo $LINE | awk -F ' ' '{print $2}'`
redis-cli -h master -p 7000 -c del $var
done < PVKEYS.txt
}
#刪除出正確的pvid資料
function selector(){
while read LINE
do
#echo $LINE
var=`echo $LINE | awk -F ' ' '{print $1}'`
#echo ${#var}
if [ ${#var} -eq 15 ];then
echo $var >> PVKEYS.txt
else
echo $var
fi
done < keys.txt
}
#獲取redis中所有的key值
function getKeys(){
for j in ${port[@]}
do
for k in ${cluster[@]}
do
echo "keys *" | redis-cli -h ${k} -p ${j} -c >>keys.txt
done
done
}
#生成批處理命令
function command(){
while read LINE
do
echo "del $LINE" >>command.txt
done < PVKEYS.txt
}
#利用redis pipeline刪除資料
function commandDel(){
cat command.txt | redis-cli -h master -p 7000 -c
}
function delTxt(){
rm -rf keys.txt
rm -rf PVKEYS.txt
rm -rf command.txt
}
#根據字首刪除
function delByPrefix(){
cat "redis-cli -h master -p 7000 -c -n 0 keys * | xargs redis-cli -h master -p 7000 -c -n 1 del "
}
#刪除生成的中間檔案
delTxt
#第一步,首先獲取所有的redis鍵值
getKeys
#第二部,對keys值進行篩選
selector
#第三部 呼叫函式刪除redis中的資料
# del
#生成批命令語句
command
#呼叫批處理命令刪除
commandDel
#呼叫指令碼獲取pvid鍵值的數量
#count