Redis Scan命令
原地址:https://www.cnblogs.com/tekkaman/p/4887293.html
【Redis Scan命令】
SCAN cursor [MATCH pattern] [COUNT count]
SCAN?命令及其相關的?SSCAN?命令、?HSCAN?命令和?ZSCAN?命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):
- SCAN?命令用于迭代當前數據庫中的數據庫鍵。
- SSCAN?命令用于迭代集合鍵中的元素。
- HSCAN?命令用于迭代哈希鍵中的鍵值對。
- ZSCAN?命令用于迭代有序集合中的元素(包括元素成員和元素分值)。
以上列出的四個命令都支持增量式迭代, 它們每次執行都只會返回少量元素, 所以這些命令可以用于生產環境, 而不會出現像?KEYS命令、?SMEMBERS?命令帶來的問題 —— 當?KEYS?命令被用于處理一個大的數據庫時, 又或者?SMEMBERS?命令被用于處理一個大的集合鍵時, 它們可能會阻塞服務器達數秒之久。
不過, 增量式迭代命令也不是沒有缺點的: 舉個例子, 使用?SMEMBERS?命令可以返回集合鍵當前包含的所有元素, 但是對于?SCAN這類增量式迭代命令來說, 因為在對鍵進行增量式迭代的過程中, 鍵可能會被修改, 所以增量式迭代命令只能對被返回的元素提供有限的保證 (offer limited guarantees about the returned elements)。
因為?SCAN?、?SSCAN?、?HSCAN?和?ZSCAN?四個命令的工作方式都非常相似, 所以這個文檔會一并介紹這四個命令, 但是要記住:
- SSCAN?命令、?HSCAN?命令和?ZSCAN?命令的第一個參數總是一個數據庫鍵。
- 而?SCAN?命令則不需要在第一個參數提供任何數據庫鍵 —— 因為它迭代的是當前數據庫中的所有數據庫鍵。
【SCAN命令的基本用法】
SCAN?命令是一個基于游標的迭代器(cursor based iterator):?SCAN?命令每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為?SCAN?命令的游標參數, 以此來延續之前的迭代過程。
當?SCAN?命令的游標參數被設置為?0?時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為?0?的游標時, 表示迭代已結束。
以下是一個?SCAN?命令的迭代過程示例:
【SCAN的命令保證】
SCAN?命令, 以及其他增量式迭代命令, 在進行完整遍歷的情況下可以為用戶帶來以下保證: 從完整遍歷開始直到完整遍歷結束期間, 一直存在于數據集內的所有元素都會被完整遍歷返回; 這意味著, 如果有一個元素, 它從遍歷開始直到遍歷結束期間都存在于被遍歷的數據集當中, 那么?SCAN?命令總會在某次迭代中將這個元素返回給用戶。
然而因為增量式命令僅僅使用游標來記錄迭代狀態, 所以這些命令帶有以下缺點:
- 同一個元素可能會被返回多次。 處理重復元素的工作交由應用程序負責, 比如說, 可以考慮將迭代返回的元素僅僅用于可以安全地重復執行多次的操作上。
- 如果一個元素是在迭代過程中被添加到數據集的, 又或者是在迭代過程中從數據集中被刪除的, 那么這個元素可能會被返回, 也可能不會, 這是未定義的(undefined)。
【SCAN 命令每次執行返回的元素數量】
增量式迭代命令并不保證每次執行都返回某個給定數量的元素。
增量式命令甚至可能會返回零個元素, 但只要命令返回的游標不是?0?, 應用程序就不應該將迭代視作結束。
用戶可以通過增量式迭代命令提供的?COUNT?選項來指定每次迭代返回元素的最大值。
雖然增量式迭代命令不保證每次迭代所返回的元素數量, 但我們可以使用?COUNT?選項, 對命令的行為進行一定程度上的調整。
基本上,?COUNT?選項的作用就是讓用戶告知迭代命令, 在每次迭代中應該從數據集里返回多少元素。
雖然?COUNT?選項只是對增量式迭代命令的一種提示(hint), 但是在大多數情況下, 這種提示都是有效的。
【MATCH選項】
和?KEYS?命令一樣, 增量式迭代命令也可以通過提供一個 glob 風格的模式參數, 讓命令只返回和給定模式相匹配的元素, 這一點可以通過在執行增量式迭代命令時, 通過給定?MATCH?<pattern>?參數來實現。
以下是一個使用?MATCH?選項進行迭代的示例:
參考:http://redisdoc.com/key/scan.html
總結
以上是生活随笔為你收集整理的Redis Scan命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx Win下实现简单的负载均衡(
- 下一篇: 【安全牛学习笔记】SQLMAP- 自动注