Redis如何批量刪除指定模式鍵的值

2021-10-05 05:13:18 字數 1609 閱讀 8348

今天有乙個小功能點是關於批量刪除redis指定的鍵。我以為幾分鐘既可以搞定的事情,沒想到花了我乙個鐘的時間。

比如我redis存的鍵是:

l:topic

l:title

l:tag

l:url

它們都有共同的字首:l

所以我一頓操作直接:delete l*

沒想到redis直接給我返回個0,意思沒有刪除任何東西。

what?redis竟然不支援這樣的模糊匹配刪除。

非要我乙個個刪?倔強的我偏不。

於是我想到了,把這些帶l字首都先查詢出來,然後再直接刪除,我記得操作redis的客戶端redistemplate可以傳可變引數的方法。

掃瞄redis的key,我想到了keys這個命令,但是被我否決了,keys *這個命令千萬別在生產環境亂用。特別是資料龐大的情況下,因為keys會引發redis鎖,並且增加redis的cpu占用,很多公司的運維都是禁止了這個命令的。

當需要掃瞄key,匹配出自己需要的key時,可以使用scan命令。

**如下:

private

void

deletelongportrait

(string[

] imeis)l";

list.

add(str);}

string join = string.

join

(","

, list)

; set

scan = redisutil.

scan

(join)

; string[

] array = scan.

toarray

(new

string

[scan.

size()

]); redisutil.

del(array)

;}

public set

scan

(string matchkey)

return keystmp;})

;return keys;

}

public

void

del(string.

.. key)

else

}}

主要業務:

前端傳了imeis陣列,然後對該imeis拼接成redis裡存的鍵的格式。

string.join(",", list),讓該集合變成string字串。

scan操作,模糊匹配得到該模式下所有的key。

scan.toarray(new string[scan.size()]),將set集合轉換成string陣列

del(string… key),string陣列作為可變引數傳入del 方法簽名。

成功刪除該模式下所有的鍵。

redis批量刪除指定的key

批量刪除key redis 中有刪除單個 key 的指令 del,可以借助 linux 的 xargs 指令來完成這個動作 redis cli keys xargs redis cli del 如果redis cli沒有設定成系統變數,需要指定redis cli的完整路徑 如 opt redis r...

redis集群批量刪除指定的key

工作中遇到乙個問題,redis中儲存了大量的key,而且沒有設定時效,其中很大一部分後來都沒用了,導致redis體積龐大,查詢緩慢。伺服器版本為windows,網上搜尋到很多批量刪除的方法都是linux下的,幾番尋找,終於找到了在windows下批量刪除超大量key的方法。首先貼一下linux下的方...

通過redis cli批量刪除多個指定模式的key

redis 中有刪除單個 key 的指令 del,但好像沒有批量刪除 key 的指令,不過我們可以借助 linux 的 xargs 指令來完成這個動作。xargs介紹 翻譯 從標準輸入執行命令 記憶 x 是執行的意思 args是引數列表的意思。就是把引數傳到後面,用這些引數去執行後面的語句。redi...