# Zadd

向有序集合添加一个或多个成员,或者更新已存在成员的分数

语法

ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member
  ...]
  • 可用版本:

    1.2.0

  • 时间复杂度:

    添加的每个项目的 O(log(N)),其中 N 是排序集中的元素数。

  • ACL 类别:

    @write, @sortedset, @fast

将具有指定分数的所有指定成员添加到存储在key处的排序集中。可以指定多个分数/成员对。如果指定的成员已经是排序集的成员,则更新分数并将元素重新插入到正确的位置以确保正确的排序。

如果key不存在,则创建一个以指定成员作为唯一成员的新排序集,就像排序集为空一样。如果键存在但不包含排序集,则返回错误。

分数值应该是双精度浮点数的字符串表示形式。+inf-inf值也是有效值。

# ZADD 选项

ZADD 支持选项列表,在键名之后和第一个分数参数之前指定。选项是:

  • XX:只更新已经存在的元素。不要添加新元素。
  • NX:只添加新元素。不要更新已经存在的元素。
  • LT:仅当新分数低于当前分数时才更新现有元素。此标志不会阻止添加新元素。
  • GT:仅当新分数大于当前分数时才更新现有元素。此标志不会阻止添加新元素。
  • CH:将返回值从添加的新元素数修改为改变的元素总数(CH 是changed的缩写)。更改的元素是添加的新元素和已更新分数的元素。因此,命令行中指定的与过去得分相同的元素不计算在内。注意:通常返回值ZADD只计算添加的新元素的数量。
  • INCR:指定此选项时的ZADD行为类似于ZINCRBY。在此模式下只能指定一个分数元素对。

注意:GTLTNX选项是互斥的。

# 可精确表达的整数分数范围

Redis 排序集使用双 64 位浮点数来表示分数。在我们支持的所有架构中,这表示为IEEE 754 浮点数-(2^53),它能够精确地表示介于两者之间的整数+(2^53)。在更实际的情况下,-9007199254740992 和 9007199254740992 之间的所有整数都可以完美表示。较大的整数或分数在内部以指数形式表示,因此您可能只获得您设置为分数的十进制数或非常大整数的近似值。

# Sorted sets 101

排序集按其分数升序排序。同一个元素只存在一次,不允许有重复的元素。分数可以通过ZADD更新元素分数来修改,作为副作用,它在排序集上的位置,并且ZINCRBY可以用于更新相对于其先前值的分数。

可以使用命令检索元素的当前分数,ZSCORE也可以用于验证元素是否已经存在。

有关排序集的介绍,请参阅排序集上的数据类型页面。

# 分数相同的元素

由于每个元素都是唯一的,因此不能在排序集中重复相同的元素,但可以添加多个具有相同 score 的不同元素。当多个元素具有相同的分数时,它们是按字典顺序排序的(它们仍然以分数作为第一个键进行排序,但是在局部,所有具有相同分数的元素都按字典顺序相对排序)。

使用的字典顺序是二进制的,它将字符串作为字节数组进行比较。

如果用户以相同的分数(例如 0)插入有序集合中的所有元素,则有序集合的所有元素都按字典顺序排序,并且可以使用命令对元素进行范围查询ZRANGEBYLEX(注:也可以使用 ) 按分数范围查询排序集ZRANGEBYSCORE

# 返回

整数回复,具体来说:

  • 当不使用可选参数时,添加到排序集中的元素数量(不包括分数更新)。
  • 如果CH指定了该选项,则为已更改(添加或更新)的元素数。

如果INCR指定了选项,则返回值将是Bulk string reply:

  • member(双精度浮点数)的新分数表示为字符串,或者nil操作是否中止(当使用XXNX选项调用时)。

# 例子

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 1 "uno"
(integer) 1
redis> ZADD myzset 2 "two" 3 "three"
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
redis> 

# 历史

  • 从 Redis 版本 2.4.0 开始:接受多个元素。
  • 从 Redis 版本 3.0.2 开始:添加了、XXNX选项。CH``INCR
  • 从 Redis 版本 6.2.0 开始:添加了GTandLT选项。

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM