redis批量刪除key的步驟
由於誤用外掛,某臺伺服器上的redis例項存在數百萬無用的key。為了刪除無用資料,上網查詢redis批量刪除key的方法,發現使用過程中都有問題。經過本人的研究,終於找到redis批量刪除key的正確用法。
本文分享最新版Redis批量刪除key的方法,希望能幫到遇到同樣問題的網友。
redis批量刪除key
網上許多文章和教程給出的redis批量刪除key命令是:
redis-cli KEYS "$PATTERN" | xargs redis-cli DEL
在本人的實踐中,這條命令存在兩個問題:
1.redis-cli KEYS "$PATTERN"的結果會出現編號,不是純粹的key列表,如下所示:
[root@node1]# redis-cli keys "*" 1) ":default:is_blog_installed" 2) ":site-options:1-notoptions"
本人用的是Redis 5版本,未測試低版本Redis是否也會新增1),2)這樣的編號。可以想到,因為編號的存在,管道後DEL刪除的是錯誤的key;
2.如果key存在空格,管道後面的DEL將無法正確刪除。例如key是”123 4566″,傳送到管道後面刪除,就變成了刪除兩個key,與預期不符合。
經過一番研究,redis批量刪除key的正確命令是:
redis-cli --raw KEYS "$PATTERN" | xargs -I {} redis-cli DEL "{}"
重點有兩個,分別解決上述命令存在的問題:
- 使用 –raw 引數,去掉結果編號;
- xargs使用佔位符,刪除key時將整個結果傳過去,避免了空格問題。
改正後的命令在本人的情況下執行正常,就是刪除兩百多萬個key有點慢,花了半個多小時。
redis批量移動key
如果你知道有用key的模式,並且有用key數量很小,可以通過redis批量移動key,然後flushdb的方法快速刪除,效率比上文提到的批量刪除大量無用key高很多。
操作方法如下:
- 批量移動key:
redis-cli --raw KEYS "$PATTERN" | xargs -L1 -I{} redis-cli MOVE {} 1
- 清空當前資料庫:
redis-cli flushdb
; - 還原key:
redis-cli -n 1 --raw KEYS "$PATTERN" | xargs -L1 -I{} redis-cli MOVE {} 0
。
注意清空當前資料庫的命令是 flushdb
,不能用 flushall
。flushdb
和flushall
的區別是:flushdb
只會清空當前資料庫的資料,而flushall
會清空當前redis例項的所有資料。
redis-cli引數
上述命令使用redis-cli
工具完成,在編號為0的預設資料庫上操作。對於需要密碼、遠端redis主機的情況,redis-cli
有如下有用引數:
-n:操作的資料庫;
-a:redis資料庫密碼
-h:redis主機ip,通過-h可以遠端批量刪除key
-p:redis埠
更多引數請參考幫助文件。
以上就是redis批量刪除key的步驟的詳細內容,更多關於redis批量刪除key的資料請關注我們其它相關文章!