ZINCRBY:对成员的分值执行自增或自减操作

通过使用 ZINCRBY 命令,用户可以对有序集合中指定成员的分值执行自增操作,为其加上指定的增量:

ZINCRBY sorted_set increment member

ZINCRBY 命令在执行完自增操作之后,将返回给定成员当前的分值。

image 2025 01 03 19 23 35 576
Figure 1. 图6-10  执行ZINCRBY命令之前的salary有序集合

举个例子,对于图6-10所示的有序集合来说,我们可以使用以下命令,对它的成员分值执行自增操作:

redis> ZINCRBY salary 1000 "tom" -- 将成员"tom"的分值加上1000
"3000" -- 成员"tom"现在的分值为3000
redis> ZINCRBY salary 1500 "peter" -- 将成员"peter"的分值加上1500
"5000" -- 成员"peter"现在的分值为5000
redis> ZINCRBY salary 3000 "jack" -- 将成员"jack"的分值加上3000
"7000" -- 成员"jack"现在的分值为7000

图6-11展示了 salary 有序集合在执行以上几个 ZINCRBY 命令之后的样子。

image 2025 01 03 19 24 40 249
Figure 2. 图6-11 执行ZINCRBY命令之后的salary有序集合

执行自减操作

因为 Redis 只提供了对分值执行自增操作的 ZINCRBY 命令,但并没有提供相应的对分值执行自减操作的命令,所以如果我们需要减少一个成员的分值,那么可以将一个负数增量传递给 ZINCRBY 命令,从而达到对分值执行自减操作的目的。

比如,通过执行以下命令,我们可以将成员 "peter" 的分值从 5000 修改为 2000:

redis> ZINCRBY salary -3000 "peter"
"2000"

图6-12 展示了在命令执行之前以及之后,salary 有序集合的变化过程。

image 2025 01 03 19 26 02 453
Figure 3. 图6-12 对成员"peter"的分值执行自减操作

处理不存在的键或者不存在的成员

如果用户在执行 ZINCRBY 命令时,给定成员并不存在于有序集合中,或者给定的有序集合并不存在,那么 ZINCRBY 命令将直接把给定的成员添加到有序集合中,并把给定的增量设置为该成员的分值,效果相当于执行 ZADD 命令。

举个例子,当我们对不存在 "lily" 成员的 salary 有序集合执行以下命令时:

redis> ZINCRBY salary 1500 "lily"
"1500"

ZINCRBY 命令将把 "lily" 成员添加到 salary 有序集合中,并把给定的增量 1500 设置为 "lily" 成员的分值,效果相当于执行 ZADD salary 1500"lily"。

如果我们对不存在的有序集合 blog-timeline 执行以下命令:

redis> ZINCRBY blog-timeline 1447063985 "blog_id::10086"
"1447063985"

那么 ZINCRBY 命令将创建出空白的 blog-timeline 有序集合,并把分值为 1447063985 的成员 "blog_id::10086" 添加到这个有序集合中,效果相当于执行命令 ZADD blog-timeline 1447063985 "blog_id::10086"。

其它信息

  • 复杂度:O(log(N)),其中 N 为有序集合包含的成员数量。

  • 版本要求:ZINCRBY 命令从 Redis 1.2.0 版本开始可用。