获取排序集合中的所有成员

89

我有一个已排序的集合,并想要获取集合中所有成员。如何使用命令确定最大/最小分数:

zrange key min max 
3个回答

157

你很幸运,因为zrange不接受分数,而是索引。 0 是第一个索引,-1 将被解释为最后一个索引:

zrange key 0 -1

要按分数获取范围,您需要调用zrangebyscore -- 在这里,-inf+inf可以分别用于表示负无穷和正无穷,正如Didier Spezia在他的评论中指出的那样:
zrangebyscore key -inf +inf

8
对于zrangebyscore命令,-inf和+inf可以用于同样的目的。 - Didier Spezia
1
使用 zrange key 0 -1 是否存在与 SMEMBERSKEYS 等调用相同的 I/O 问题?Redis 文档在 SMEMBERS 中非常明确地指出使用 SSCAN 可能更好,但它对于 ZSCAN 而言并没有提到 ZRANGE ... 0 -1 - dwanderson
一般而言,如果结果需要使用游标,则代价会更高。 - MrR
对于使用Node.js和ioredis进行zrangebyscore设置,无论是(string)+inf还是(number)Number.POSITIVE_INFINITY都可以使用。 - OXiGEN
对于使用Node.js和ioredis进行zrangebyscore设置,无论是(string)+inf还是(number)Number.POSITIVE_INFINITY都可以使用。 - undefined

4
从Redis 6.2.0开始,
使用以下命令可以在单个查询中获取所有键及其值: zrange <KEY> 0 -1 WITHSCORES 可选的WITHSCORES参数会将元素的分数与返回的结果一起返回。返回的列表包含value1,score1,...,valueN,scoreN而不是只有value1,...,valueN。客户端库可以返回更适当的数据类型(建议:一个包含(value,score)数组/元组的数组)。

2
在新版本的Redis(>= v6.2.0)中,如果你想获取两个分数之间所有有序集合成员,你应该使用以下命令:
ZRANGE key min max BYSCORE

添加BYSCORE选项使redis将minmax参数视为分数而不是索引。

(截至本文撰写时,ZRANGEBYSCORE仍然有效,但被视为已弃用。)


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