redis實現批量刪除的命令介紹

redis實現批量刪除的命令介紹

redis實現批量刪除:

1、訪問redis根目錄? ? cd? /usr/local/redis-2.8.19

2、登錄redis:redis-cli -h 127.0.0.1 -p 6379 (其中,127.0.0.1可以寫成服務器的IP地址,6379為端口號)

3、查看所有key值:keys *

4、刪除指定索引的值:del key

5、清空整個 Redis 服務器的數據:flushall?

6、清空當前庫中的所有 key:flushdb?

【第一種方式】:

下面是批量刪除以“key_”開頭的所有redis數據 數量為100個

redis-cli?-h?(IP地址)?-p?6379?(端口號:6379)?KEYS?key_*?|?xargs?redis-cli?(-h?(IP地址)?-p?6379?(端口號:6379))?del? ? =>[執行后返回的結果影響數量]:(integer)?100[數量100個]

【上述命令中 DEL函數的具體用法】:

DEL key [key …]

刪除給定的一個或多個 key 。

不存在的 key 會被忽略。

時間復雜度:

O(N), N 為被刪除的 key 的數量。

刪除單個字符串類型的 key ,時間復雜度為O(1)。

刪除單個列表、集合、有序集合或哈希表類型的 key ,時間復雜度為O(M), M 為以上數據結構內的元素數量。

返回值:?

被刪除 key 的數量。

【舉例說明】:

#??刪除單個?key redis>?SET?name?huangz OK ? redis>?DEL?name (integer)?1 ? #?刪除一個不存在的?key redis>?EXISTS?phone (integer)?0 ? redis>?DEL?phone?#?失敗,沒有?key?被刪除 (integer)?0 ? #?同時刪除多個?key redis>?SET?name?"redis" OK ? redis>?SET?type?"key-value?store" OK ? redis>?SET?website?"redis.com" OK ? redis>?DEL?name?type?website (integer)?3

【第二種方式】:?

第一種方式弊端:這樣一個壞處每次都要建立一個連接,量小的話還可以接受,量大的話,效率不行。

通過內置的 lua 解釋器,可以使用 EVAL 命令對 Lua 腳本:

redis-cli?-h(IP地址)?-p?6379(端口號:6379)?--EVAL?"return?redis.call('del',?unpack(redis.call('keys',?ARGV[1])))"?0?'Volume:*'

【注】:但這種處理方式,量大的情況下,lua函數unpack會出現問題,會報錯誤?

''' (error)?ERR?Error?running?script?(call?to?f_e177a091510d969af3b388ee986dbe6658df6b57):?@user_script:1:?user_script:1:?too?many?results?to?unpack '''

【第二種方式優化后】:

【注釋】:首先定義一個數組 keys,里面存儲了模式匹配的所有的以 ‘Volume:’的key,然后for循環,每次處理5000個key,也就是說每次del 5000個key

redis-cli?-h(IP地址)?-p?6379(端口號:6379)?--EVAL?"local?keys?=?redis.call('keys',?ARGV[1])? 	for?i=1,#keys,5000? 		do? 			redis.call('del',?unpack(keys,?i,?math.min(i+4999,?#keys)))? 		end? 		return?#keys"?0?'Volume:*'

【第二種方式弊端】:?

KEYS操作在線上是禁止使用的!

Redis是單線程的,如果量很大的話,keys是遍歷key的,會導致阻塞,這樣其他的客戶端就沒法連接了!

【第三種方式】:?

自從redis2.8以后就開始支持scan命令,模式匹配可以采取下面的形式來批刪除大量的key

redis-cli?-a?youpassowrd?-n?0?-p?6379?--scan?--pattern?"Volume:*"?|?xargs?-L?5000?redis-cli?-a?youpassword?-n?0?-p?6379?DEL

【結果】:

''' ?/work/app/redis/bin/redis-cli?-a?youpassword?-n?0?-p?6379?--scan?--pattern?"Volume:*"?|?xargs?-L?5000?/work/app/redis/bin/redis-cli?-a?youpassword?-n?0?-p?6379?DEL (integer)?5000 (integer)?5000 (integer)?5000 (integer)?5000 (integer)?5000 (integer)?5000 (integer)?5000 (integer)?207 '''

更多redis知識請關注redis入門教程欄目。

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享