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指令使用非常簡單,提供乙個簡單的正則字串即可,但是...