redis 迭代命令SCAN、SSCAN、HSCAN、ZSCAN


SCAN 命令用於迭代當前數據庫中的數據庫鍵。
SSCAN 命令用於迭代集合鍵中的元素。
HSCAN 命令用於迭代哈希鍵中的鍵值對。
ZSCAN 命令用於迭代有序集合中的元素(包括元素成員和元素分值)。

SCAN、SSCAN、HSCAN、ZSCAN每次執行都只會返回少量元素,所以這些命令可以用於生產環境,而不會出現像KEYS、SMEMBERS命令帶來的問題,當KEYS命令被用於處理一個大的數據庫時,又或者SMEMBERS命令被用於處理一個大的集合鍵時,它們可能會阻塞服務器達數秒之久。


SCAN cursor [MATCH pattern] [COUNT count]
SSCAN、HSCAN、ZSCAN的第一個參數總是一個數據庫鍵;而SCAN命令則不需要在第一個參數提供任何數據庫鍵,因為它迭代的是當前數據庫中的所有數據庫鍵。
可以通過增量式迭代命令提供的 COUNT 選項來指定每次迭代返回元素的最大值;COUNT參數的默認值為10。

scan 0

sadd myset 1 2 3 foo foobar feelsgood
sscan myset 0 match f*


SCAN命令是一個基於游標的迭代器,每次被調用之后,都會向用戶返回一個新的游標,用戶在下次迭代時需要使用這個新游標作為SCAN 命令的游標參數,以此來延續之前的迭代過程。

當SCAN命令的游標參數設置為0時,服務器將開始一次新的迭代,而當服務器向用戶返回值為0的游標時,表示迭代已結束。
如果一個元素是在迭代過程中被添加到數據集的,又或者是在迭代過程中從數據集中被刪除的,那么這個元素可能會被返回,也可能不會。

在同一時間,可以有任意多個客戶端對同一數據集進行迭代,客戶端每次執行迭代都需要傳入一個游標,並在迭代執行之后獲得一個新的游標,而這個游標就包含了迭代的所有狀態,因此,服務器無須為迭代記錄任何狀態。
因為迭代的所有狀態都保存在游標里面,而服務器無須為迭代保存任何狀態,所以客戶端可以在中途停止一個迭代,而無須對服務器進行任何通知。即使有任意數量的迭代在中途停止,也不會產生任何問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM