0
在redis(2.8.x)中我有三種實體類型(我定義了實體)。
爲簡單起見,我們稱之爲組織,部門,用戶。
當我運行掃描時,它遍歷內存中的所有鍵,但只帶來與match
子句相匹配的內容。
有沒有辦法將scan
限制爲只有一個鍵的子集?例如搜索 只有用戶組密鑰?
每個組具有不同的(但一致的)密鑰名稱模式(org:[id] dep:[id] user:[id]
)如何限制掃描到一組特定的鍵
在redis(2.8.x)中我有三種實體類型(我定義了實體)。
爲簡單起見,我們稱之爲組織,部門,用戶。
當我運行掃描時,它遍歷內存中的所有鍵,但只帶來與match
子句相匹配的內容。
有沒有辦法將scan
限制爲只有一個鍵的子集?例如搜索 只有用戶組密鑰?
每個組具有不同的(但一致的)密鑰名稱模式(org:[id] dep:[id] user:[id]
)如何限制掃描到一組特定的鍵
SCAN有一個可選MATCH
論點,即接受glob模式。
你可以做這樣的事情,通過你的用戶對象掃描:
SCAN 0 MATCH user:*
編輯,因爲它是太長了評論
顯然掃描是不是一個神奇的方法,一個完整的循環(直到你收到「0」光標)必須經過你的所有密鑰空間。 MATCH選項在Redis端進行篩選,而不是在客戶端進行篩選。
由於伊塔馬爾建議在他的評論,才能夠得到你需要沒有去徹底完整的密鑰空間的密鑰,必須對其進行索引中集(你也必須保持它清除)。
例如,如果你的用戶密鑰:
user:31 user31data
user:45 user45data
user:67 user67data
user:13 user13data
你應該有用戶ID的SET
:
users:IDs {31, 45, 67, 13}
要檢索所有用戶的數據,你可能想都ID和數據:
sort users:IDs by nosort get # get user:*
scan + match首先獲取所有記錄,然後應用過濾器。所以它不會保存。您可以輕鬆地看到這一點(除了在文檔中閱讀),因爲光標的大小不同,每次調用 – 2015-02-18 12:08:40
在這種情況下,no - 您無法限制SCAN。但是,您可以維護包含每個實體組的關鍵名稱的集合。然後,您只能SSCAN這些設置,以避免掃描整個密鑰空間。 – 2015-02-18 13:01:29