HINCRBY:对字段存储的整数值执行加法或减法操作

与字符串键的 INCRBY 命令一样,如果散列的字段里面存储着能够被 Redis 解释为整数的数字,那么用户就可以使用 HINCRBY 命令为该字段的值加上指定的整数增量:

HINCRBY hash field increment

HINCRBY 命令在成功执行加法操作之后将返回字段当前的值作为命令的结果。

比如,对于图 3-10 所示的 article::10086 散列,我们可以通过执行以下命令为 view_count 字段的值加上 1:

redis> HINCRBY article::10086 view_count 1
(integer) 101

也可以通过执行以下命令,为 view_count 字段的值加上 30:

redis> HINCRBY article::10086 view_count 30
(integer) 131
image 2025 01 02 17 46 10 287
Figure 1. 图3-10 存储着文章数据的散列

执行减法操作

因为 Redis 只为散列提供了用于执行加法操作的 HINCRBY 命令,但是没有为散列提供相应的用于执行减法操作的命令,所以如果用户需要对字段存储的整数值执行减法操作,就需要将一个负数增量传给 HINCRBY 命令,从而达到对值执行减法计算的目的。

以下代码展示了如何使用 HINCRBY 命令去对 view_count 字段存储的整数值执行减法计算:

redis> HGET article::10086 view_count -- 文章现在的浏览次数为131次
"131"
redis> HINCRBY article::10086 view_count -10 -- 将文章的浏览次数减少10次
"121"
redis> HINCRBY article::10086 view_count -21 -- 将文章的浏览次数减少21次
"100"
redis> HGET article::10086 view_count -- 文章现在的浏览次数只有100次
"100"

处理异常情况

只能对存储着整数值的字段执行 HINCRBY 命令,并且用户给定的增量也必须为整数,尝试对非整数值字段执行 HINCRBY 命令,或者向 HINCRBY 命令提供非整数增量,都会导致 HINCRBY 命令拒绝执行并报告错误。

以下是一些导致 HINCRBY 命令报错的例子:

redis> HINCRBY article::10086 view_count "fifty" -- 增量必须能够被解释为整数
(error) ERR value is not an integer or out of range
redis> HINCRBY article::10086 view_count 3.14 -- 增量不能是浮点数
(error) ERR value is not an integer or out of range
redis> HINCRBY article::10086 content 100 -- 尝试向存储字符串值的字段执行
HINCRBY
(error) ERR hash value is not an integer

其它信息

  • 复杂度:O(1)。

  • 版本要求:HINCRBY 命令从 Redis 2.0.0 版本开始可用。