2012-10-08 70 views
2

在Redis中,是否有可能從Set中獲取一系列項目?Redis從Set中獲取範圍?

我只注意到SMEMBERS給你所有的成員。 http://redis.io/commands#set

例如,如果我必須每次使用數百萬個物品的SMEMBERS,我只希望其中的10個從索引33,456到33,466。

每次我要求其中10個項目時,SMEMBERS將必須生成數百萬項目的完整列表。這不是一個性能殺手嗎?或者它可以,因爲Redis速度很快並且意圖以這種方式使用?

+2

一組是一個無序的數據結構。按集合中的範圍提取項目是沒有意義的。沒有索引的概念。也許你應該使用一個列表或一個排序集? –

+2

供參考:[Redis 2.6.0-RC8](http://antirez.com/post/redis-2.6-rc8-out.html)現在有一個'SRANDMEMBER '命令*返回多個隨機元素*你可能會覺得有用。 – deltheil

+1

您可以使用功能豐富的_sort_命令實現您的目標:http://redis.io/commands/sort –

回答

1

不,這是不可能的,因爲索引的概念在Set數據類型中不存在。實際上,SMEMBERS並不能保證你有特定的訂單;每次你打電話時,這些元素的順序很可能是隨機的。將Sets設想爲無序的集合:很好,如果你需要存儲一些共享某些共同點的ID,但是如果你需要實現分頁,則肯定不是要使用的數據類型。也許你正在尋找ListsSorted Sets

我建議你閱讀下面瞭解redis的可用的數據類型以及何時使用每個: