redis 清理某個key前綴的key

redis清理某個前綴的keypython


例如,某次研發上線代碼,形成了某種前綴的key出現了髒數據(例如key前綴名稱爲 key_  ), 咱們須要快速的清理掉這些問題key。redis


經常使用的方法有2種:vim

一、dump出一個全量數據,而後找出符合條件的key,進行刪除操做【推薦】bash

二、使用scan掃描redis,將所有key撈出來,而後再刪除符合條件的keypython2.7



咱們這裏使用第一種方法,具體以下操做:ide


一、在slave節點bgsave命令dump出一份全量數據工具

bgsave  ,生成的文件名相似  dump-6379.rdb spa


二、 安裝 rdb 解析工具排序

pip install rdbtools python-lzf   # python2.7 下 一行命令便可完成安裝

rdb -c memory dump-6379.rdb > memory.csv  # 用這個命令將rdb進行分析



三、過濾出符合條件的keyip

awk  -F ',' '{print $3 ,  $NF }'  memory.csv > keys.txt    # 過濾出key的名稱和過時時間

egrep key_  keys.txt > /root/key_.txt     # 將 key_ 前綴的key 過濾出來

cat /root/key_.txt | sort -k 2 -r > /root/sort_keys    # 對key按照日期進行倒序排序

egrep 2019-09-10 /root/sort_keys  > /root/match_keys    # 注意:我這裏緊急處理,只過濾出 2019-09-10 過時的key(這是最新的數據,也是目前業務最常訪問的key,也就是最須要緊急處理的)

awk '{print $1}' /root/match_keys > /root/filter_keys    # 將最終須要處理的key重定向到一個文件

mkdir /root/test/

split -2000 /root/filter_keys  /root/test/    # 將 filter_keys 這個文件 按照每一個2k行切分紅多個文件,便於後續並行處理



而後,咱們寫個腳本,批量處理下:


vim /root/batch.sh  內容以下:

for i in `ls /root/test/`; do
echo "while read line;do
echo \"del \$line\" | redis-cli -h 127.0.0.1 -p 6379 
done < /root/test/${i}" > /root/run_${i}.sh
chmod +x /root/run_${i}.sh 
done


這樣就生成了一堆的腳本


下面寫個腳本,批量執行下就行了;

#!/bin/bash
for i in `ls run*.sh`; do 
nohup sh $i > /dev/null &
done
相關文章
相關標籤/搜索