由于誤用插件,某臺(tái)服務(wù)器上的redis實(shí)例存在數(shù)百萬(wàn)無(wú)用的key。為了刪除無(wú)用數(shù)據(jù),上網(wǎng)查找redis批量刪除key的方法,發(fā)現(xiàn)使用過(guò)程中都有問(wèn)題。經(jīng)過(guò)本人的研究,終于找到redis批量刪除key的正確用法。
本文分享最新版Redis批量刪除key的方法,希望能幫到遇到同樣問(wèn)題的網(wǎng)友。
redis批量刪除key
網(wǎng)上許多文章和教程給出的redis批量刪除key命令是:
redis-cli KEYS "$PATTERN" | xargs redis-cli DEL
在本人的實(shí)踐中,這條命令存在兩個(gè)問(wèn)題:
1.redis-cli KEYS "$PATTERN"的結(jié)果會(huì)出現(xiàn)編號(hào),不是純粹的key列表,如下所示:
[root@node1]# redis-cli keys "*" 1) ":default:is_blog_installed" 2) ":site-options:1-notoptions"
本人用的是Redis 5版本,未測(cè)試低版本Redis是否也會(huì)添加1),2)這樣的編號(hào)。可以想到,因?yàn)榫幪?hào)的存在,管道后DEL刪除的是錯(cuò)誤的key;
2.如果key存在空格,管道后面的DEL將無(wú)法正確刪除。例如key是”123 4566″,傳送到管道后面刪除,就變成了刪除兩個(gè)key,與預(yù)期不符合。
經(jīng)過(guò)一番研究,redis批量刪除key的正確命令是:
redis-cli --raw KEYS "$PATTERN" | xargs -I {} redis-cli DEL "{}"
重點(diǎn)有兩個(gè),分別解決上述命令存在的問(wèn)題:
改正后的命令在本人的情況下運(yùn)行正常,就是刪除兩百多萬(wàn)個(gè)key有點(diǎn)慢,花了半個(gè)多小時(shí)。
redis批量移動(dòng)key
如果你知道有用key的模式,并且有用key數(shù)量很小,可以通過(guò)redis批量移動(dòng)key,然后flushdb的方法快速刪除,效率比上文提到的批量刪除大量無(wú)用key高很多。
操作方法如下:
redis-cli --raw KEYS "$PATTERN" | xargs -L1 -I{} redis-cli MOVE {} 1
,其中命令最后的1是備份數(shù)據(jù)庫(kù)的編號(hào);redis-cli flushdb
;redis-cli -n 1 --raw KEYS "$PATTERN" | xargs -L1 -I{} redis-cli MOVE {} 0
。注意清空當(dāng)前數(shù)據(jù)庫(kù)的命令是 flushdb
,不能用 flushall
。flushdb
和flushall
的區(qū)別是:flushdb
只會(huì)清空當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù),而flushall
會(huì)清空當(dāng)前redis實(shí)例的所有數(shù)據(jù)。
redis-cli參數(shù)
上述命令使用redis-cli
工具完成,在編號(hào)為0的默認(rèn)數(shù)據(jù)庫(kù)上操作。對(duì)于需要密碼、遠(yuǎn)程redis主機(jī)的情況,redis-cli
有如下有用參數(shù):
-n:操作的數(shù)據(jù)庫(kù);
-a:redis數(shù)據(jù)庫(kù)密碼
-h:redis主機(jī)ip,通過(guò)-h可以遠(yuǎn)程批量刪除key
-p:redis端口
更多參數(shù)請(qǐng)參考幫助文檔。
以上就是redis批量刪除key的步驟的詳細(xì)內(nèi)容,更多關(guān)于redis批量刪除key的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
標(biāo)簽:定州 拉薩 河源 畢節(jié) 甘南 伊春 南寧 泰州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis批量刪除key的步驟》,本文關(guān)鍵詞 redis,批量,刪除,key,的,步驟,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。