2012-10-08 40 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的可用的数据类型以及何时使用每个: