1. 程式人生 > 資料庫 >redis批量刪除key的步驟

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 "{}"

重點有兩個,分別解決上述命令存在的問題:

  1. 使用 –raw 引數,去掉結果編號;
  2. xargs使用佔位符,刪除key時將整個結果傳過去,避免了空格問題。

改正後的命令在本人的情況下執行正常,就是刪除兩百多萬個key有點慢,花了半個多小時。

redis批量移動key

如果你知道有用key的模式,並且有用key數量很小,可以通過redis批量移動key,然後flushdb的方法快速刪除,效率比上文提到的批量刪除大量無用key高很多。

操作方法如下:

  1. 批量移動key:redis-cli --raw KEYS "$PATTERN" | xargs -L1 -I{} redis-cli MOVE {} 1
    ,其中命令最後的1是備份資料庫的編號;
  2. 清空當前資料庫:redis-cli flushdb
  3. 還原key:redis-cli -n 1 --raw KEYS "$PATTERN" | xargs -L1 -I{} redis-cli MOVE {} 0

注意清空當前資料庫的命令是 flushdb,不能用 flushallflushdbflushall的區別是: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的資料請關注我們其它相關文章!