redis中keys和scan的對比

2021-09-24 17:58:46 字數 1426 閱讀 7062

redis中keys和scan的對比

兩者都是用來返回key的,但是使用場景和方法不同。

一、keys

keys pattern

比如: keys *

keys user_info:*

特點:1、在選定的庫中,一次性全部返回符合條件的key,如果資料量很大將會等待很久,

因此,只適合用在可控的量小的鍵查詢,比如幾百,幾千。

2、返回的鍵精確,不會重複,可放心使用。

二、scan

scan cursor [match pattern] [count count]

cursor:查詢游標,第一次0,後面就是使用返回陣列中第乙個值,當返回的值為0時則表示遍歷完畢。

match pattern:匹配乙個表示式,同上,選填。

[count count]:指定每次迭代返回元素的最大值的一種提示(預設值為 10),但是在大多數情況下,

這種提示都是有效的,因此,返回的個數在count左右。

示例:scan 0 match user_info:* count 10

返回:1) "6"

2) 1) "user_info:85:1114850"

2) "user_info:88:1114880"

3) "user_info:16:1081160"

4) "user_info:84:1114840"

5) "user_info:77:1114770"

6) "user_info:83:1114830"

7) "user_info:79:1114790"

8) "user_info:74:1114740"

9) "user_info:72:1114720"

10) "user_info:69:1114690"

11) "user_info:86:1114860"

12) "user_info:78:1114780"

特點:1、隨機性較高,沒有規律。

2、唯一能判斷遍歷結束的標誌就是返回結果集的第乙個元素,示例中的6,游標只是乙個標識,不可比較,

下次返回的游標可能比現在大或者小,但是只要等於0就確定結束了。

3、返回的列表存在重複的情況,需要應用程式自己處理。

4、由於全部遍歷完需要一點時間,如果過程中鍵被操作了,那麼影響未知。

5、返回的數量沒有確定的數量

在數量未知或者數量較大的情況下使用scan遍歷來獲取所有的key

$cursor = 0;

$keys_arr = ;

while(true)

if($re[1] == 0)else

}else

}// 排重

$keys_arr = array_unique($keys_arr);

理解redis中的scan

redis在2.8版本提供了scan相關命令用來遍歷集合中的元素。和keys,smembers命令遍歷大集合場景下會阻塞redis一定時間不同,scan命令每次遍歷只會返回一定數量集合元素和當前的遍歷位置的游標,時間非常短,不會阻塞redis,遍歷大集合時對其他業務影響較小。缺點是通過多次呼叫sca...

Redis中的keys和Hkeys的區別

3 hkeys keys和hkeys最根本的區別就是操作的物件不同 keys pattern 查詢符合給定模式的key。keys 命中資料庫中所有key。keys h?llo命中hello,hallo and hxllo等。keys hllo命中hllo和heeeeello等。keys h ae l...

Redis查詢指令 SCAN

目錄 1 keys鍵命令缺點 2 引入scan命令 3 scan使用 4 更多scan指令 5 允許中途停止迭代 6 迭代什麼時候終結 7 時間複雜度 redis 提供了乙個簡單暴力的指令 keys 用來列出所有滿足特定正則字串規則的key。keys指令使用非常簡單,提供乙個簡單的正則字串即可,但是...