之前使用的keys查找key,一次獲取到了所有的key,當key較多時,這個操作就有可能造成Redis服務器阻塞.特別是keys *操作.
于是可以通過漸進式遍歷,每次獲取部分key,通過多次遍歷,既查詢到了所有的key,又不會卡死服務器. 漸進式遍歷不是通過一個命令獲取到所有元素的,而是由一組命令完成,這組命令的使用方法是一樣的.
語法: scan? cousor [pattern pattern]? [count count]? [type type]?
返回值: 1)."cousor"
????????????????2).元素列表
cousor: 光標位置,初始值為0,表示從頭開始;返回值由兩部分組成,第一部分的cousor代表下次開始查詢的光標位置.
注: 這個返回的光標,僅能有Redis服務器知道這個光標對應的元素位置在哪里.不能理解成"下標",程序員或客戶端是不認識的.
pattern:這個字段和keys中的匹配方式一樣,給出指定的匹配方式;
count: 一次能夠遍歷到的元素個數,默認是10;
type: 指定key對應的val的類型,默認是所有類型,不區分類型。
注:漸進式遍歷scan雖然解決了阻塞的問題,到那時如果在遍歷期間鍵有所變化(對其執行增刪改操作),可能會導致遍歷的時候鍵的重復或遺漏,使用的時候需要注意這一點。
當前一共有12個key:
漸進式遍歷,默認一次遍歷10個元素:
第二次返回的cursor是7,7是一個光標,不能理解成下標.
指定count為3,一次遍歷3個元素: