今天有乙個小功能點是關於批量刪除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...