2016-12-27 22 views
0

比方說,我有一個百萬個按鍵的redis實例。密鑰包含團隊ID和人員ID,值包含有關該團隊人員關聯的一些信息。例如鍵:帶前綴匹配模式的redis掃描是否掃描數據庫中的所有密鑰?

team:1:person:123 
team:2:person:234 
team:2:person:345 
... 

我可以用一個scan用圖案讓所有的人都在給定的球隊。例如,scan 0 match "team:123:person:*",將開始對團隊讓每個人都123

這聽起來像這不是一種有效的方式來遍歷人在一個團隊中,因爲掃描是O(N),其中N是按鍵的數量在數據庫。但我想確認 - 是這種情況嗎?

具有樹索引的數據庫可能只需掃描樹的一小部分,並使用具有該前綴的鍵。

如果它確實掃描了所有內容,那麼我猜如果我想快速遍歷團隊中的人員,我需要將該人員ID集合存儲在團隊ID下。喜歡的東西:

sset team:2:people 234 345 ... 

回答

2

但我想確認 - 是這樣嗎?

確認,事實確實如此。

店下組ID

這正是你應該設定人的ID。但是,請注意,一旦這個Set變得太大,做SMEMBERS可能是一個昂貴的操作(因此即將到來的整體性能)。如果確實成爲問題,請使用SSCAN來悠閒地找回它。

相關問題