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

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