您好,登錄后才能下訂單哦!
redis清理某個前綴的key
例如,某次研發上線代碼,造成了某種前綴的key出現了臟數據(例如key前綴名稱為 key_? ), 我們需要快速的清理掉這些問題key。
常用的方法有2種:
1、dump出一個全量數據,然后找出符合條件的key,進行刪除操作【推薦】
2、使用scan掃描redis,將全部key撈出來,然后再刪除符合條件的key
我們這里使用第一種方法,具體如下操作:
1、在slave節點bgsave命令dump出一份全量數據
bgsave? ,生成的文件名類似? dump-6379.rdb?
2、 安裝 rdb 解析工具
pip?install?rdbtools?python-lzf???#?python2.7?下?一行命令即可完成安裝 rdb?-c?memory?dump-6379.rdb?>?memory.csv??#?用這個命令將rdb進行分析
3、過濾出符合條件的key
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。