从一个集合中获取Redis范围?

3
在Redis中,是否可以从Set中获取一系列项目?
我只注意到SMEMBERS可以给出所有成员。http://redis.io/commands#set 例如,如果我每次需要使用SMEMBERS来处理数百万个项目,但我只想从索引33,456到33,466获取其中的10个。
每次我要求获取其中10个项目时,SMEMBERS都必须生成数百万个项目的完整列表。这不会影响性能吗?还是说因为Redis速度快,所以可以这样使用?

2
集合是一种无序的数据结构。在集合中按范围获取项目是没有意义的,因为没有索引的概念。也许你应该使用列表或排序集? - Didier Spezia
2
请注意:从Redis 2.6.0-RC8开始,现在有一个SRANDMEMBER <count>命令,返回多个随机元素,您可能会发现它很有用。 - deltheil
1
您可以使用相对功能丰富的 sort 命令来实现您的目标:http://redis.io/commands/sort - Ofer Zelig
2个回答

4

由于集合是无序的,因此您无法在集合中获取range,因此也无法进行索引。但是,您可以使用SMEMBERS获取集合中的所有成员。

在redis-cli中:

SMEMBERS my_set

此外,ZRange 可能有助于您在redis中使用Sorted Sets

在redis-cli中:

ZRANGE your_key 33455 33465

2
不可能,因为集合数据类型中不存在索引的概念。实际上,SMEMBERS 不保证你一个特定的顺序;每次调用时元素的顺序很可能是随机的。将集合视为无序的事物集合:如果需要存储共享某些共同点的 id,则非常适合,但如果需要实现分页,则绝对不是要使用的数据类型。也许您应该考虑使用列表排序集合
我建议阅读以下内容,以了解 redis 中可用的数据类型及何时使用每种类型:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接