溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何獲取Redis中所有的鍵

發(fā)布時間:2021-07-13 14:58:43 來源:億速云 閱讀:703 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“如何獲取Redis中所有的鍵”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

在日常的開發(fā)中我們有時會要遍歷Redis中的所有的鍵,我們在之前的文章中已經(jīng)介紹過了,我們可以用keys命令來獲取所有的鍵,那么在Redis中除了keys命令之外,我們還可以使用scan命令獲取。下面我們將詳細了解一下這兩種命令的相關(guān)內(nèi)容。


1.全量遍歷鍵

keys pattern


在之前的文章中我們已經(jīng)介紹過了,可以直接使用 

keys *


命令來遍歷Redis中的所有鍵,那么實際上keys命令也是可以支持pattern匹配的。下面我們通過例子演示一下上面所說的內(nèi)容。

如何獲取Redis中所有的鍵

下面我們看一下pattern通配符的詳細說明:

- * 代表匹配任意字符
- ? 代表匹配一個字符
- [] 代表匹配部分字符,例如[1,3]代表匹配1和3,而[1-10]代表匹配1到10的任意數(shù)字。
- x 轉(zhuǎn)移字符,例如要匹配星號,問號需要轉(zhuǎn)義的字符
如何獲取Redis中所有的鍵


下面我們繼續(xù)看相關(guān)用例。

Redis中的keys命令是很實用的命令,例如如果我要刪除指定名字開頭的鍵時,也可以使用keys命令先查找,然后在執(zhí)行刪除。具體命令如下:

./redis-cli keys j* | xargs ./redis-cli del
如何獲取Redis中所有的鍵

備注:在執(zhí)行上述刪除命令時,是不需要在Redis客戶端中執(zhí)行時的。

如何獲取Redis中所有的鍵

我們知道在Redis中是單架構(gòu)的,所以在執(zhí)行keys命令時有時會造成阻塞,所以我們在使用keys命令時要慎用。下面我們看一下,使用keys命令的注意事項。

  • 因為keys命令是會阻塞的,所以我們在使用keys命令時,要在非業(yè)務(wù)的客戶端中進行,這樣即使keys命令會阻塞,也不會影響相關(guān)的業(yè)務(wù)。

  • 如Redis中的鍵總數(shù)比較少時,可以直接使用keys命令。

  • 如果Redis中的鍵的總數(shù)比較多,并且我們不得不在業(yè)務(wù)環(huán)境的客戶端如生產(chǎn)環(huán)境客戶端中獲取所有鍵時,那我們可以使用scan命令,因為該命令不會對客戶端造成阻塞。


下面我們了解一下Redis中scan命令。

2.漸進式遍歷

Redis在2.8版本之后,提供了scan命令,用這個命令可以有效的解決keys命令阻塞的問題。但scan命令和keys命令不同,scan命令是采用漸進式方式遍歷鍵的。并且scan命令的時間復(fù)雜度為O(1)。所以scan命令如果要實現(xiàn)keys命令的功能,則要執(zhí)行很多次scan命令。因為在Redis中鍵的存儲實際上使用的是hashtable數(shù)據(jù)結(jié)構(gòu)。所以我們在使用scan命令時,可以理解為只獲取字典的一部分,如果要獲取到所有鍵時,則要調(diào)用多次scan命令。

scan cursor [MATCH pattern] [COUNT count]


下面我們詳細介紹一下scan命令的相關(guān)參數(shù)說明:

  • cursor: 必須參數(shù),cursor是一個游標(biāo)參數(shù),第一次遍歷時游標(biāo)從0開始,每次scan遍歷完都會返回當(dāng)前游標(biāo)的值。

  • MATCH pattern: 可選參數(shù),和keys中的pattern參數(shù)一樣。

  • COUNT count: 可選參數(shù),count參數(shù)指的是scan命令每次返回鍵的個數(shù)。

如何獲取Redis中所有的鍵
如何獲取Redis中所有的鍵

下面我們看一下scan命令的相關(guān)例子。


就向上面執(zhí)行的scan命令一樣,scan命令每次執(zhí)行完都會返回,上次cursor的參數(shù),當(dāng)cursor參數(shù)為0時,則表示,Redis中的所有的鍵都已經(jīng)遍歷完了。

在Redis中除了scan命令外,還提供了hscan、sscan、zscan等命令,它們的使用方式,均和scan命令一樣。

下面我們看一下scan命令的注意事項。

  • 優(yōu)勢:可以解決keys命令中命令阻塞的問題。

  • 劣勢:如果使用scan命令時,如果Redis中的鍵發(fā)生了變化例如:增加、刪除、修改等操作時,scan命令可能會遇到遍歷不到所有鍵的情況,這也是我們在使用scan命令遍歷的鍵特別要注意的事項。

“如何獲取Redis中所有的鍵”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI