2012-11-27 37 views
2

在Redis中,如何取得所有小於x的成員? 做這個任務的時間複雜度是多少?Redis排序集,取得所有小於x的成員

+0

我可以建議你看一看精彩redis的文檔?它具有解釋,時間複雜性和所有命令的用例。請參閱[有序集](http://redis.io/commands/#sorted_set)。 –

回答

6

您可以使用ZRANGEBYSCORE redis命令。

例如

1) "one" 
2) "two" 
3) "three" 

也爲得分大於4

ZRANGEBYSCORE myset 4 +inf 

結果:

1) "five" 
2) "six" 

關於複雜性,由於有評分小於4

zadd myset 1 "one" 
zadd myset 2 "two" 
zadd myset 3 "three" 
zadd myset 5 "five" 
zadd myset 6 "six" 

ZRANGEBYSCORE myset -inf 4 

結果成員到我的Redis文檔S 0(日誌(N)+ M)

編輯: 第二個示例

比方說,我們有一個網絡遊戲,這是我們在Redis的有序集合存儲的記分牌。 下面的命令創建這個測試

zadd scoreboard 101 "John" 333 "Mary" 323 "Nick" 900 "Steve" 901 "Sam" 333 "Mike" 

有資格進入下一輪的選手都與得分低於330要找到這些球員,我們運行以下命令的人。

ZRANGEBYSCORE scoreboard -inf 330 

這將導致到2名球員(約翰和尼克)

1) "John" 
2) "Nick" 

爲了進一步解釋一下這個命令: ZRANGEBYSCORE:Redis的命令,查看文檔 記分牌:排序集我創建的 -inf:是我的命令的最低價格 330:我的命令的最高價格

它的作用是從-in找到此範圍內的所有成員有限爲330,我理解爲330以下的所有成員。

我希望我幫助:)

+0

只有當我知道範圍時,該命令纔會有幫助。但在這種情況下,我不知道存儲在集合中的範圍。 –

+1

在我的示例x = 4中,返回所有成員的分數爲4和更小的無限範圍(-inf)。 –

+0

你能舉個最小值的例子嗎? –