INCRBY、DECRBY:对整数值执行加法操作和减法操作

当字符串键储存的值能够被 Redis 解释为整数时,用户就可以通过 INCRBY 命令和 DECRBY 命令,对被储存的整数值执行加法操作或是减法操作。

INCRBY 命令用于为整数值加上指定的整数增量,并返回键在执行加法操作之后的值:

  1. INCRBY key increment

以下代码展示了如何使用 INCRBY 命令去增加一个字符串键的值:

  1. redis> SET number 100
  2. OK
  3.  
  4. redis> GET number
  5. "100"
  6.  
  7. redis> INCRBY number 300 -- 将键的值加上 300
  8. (integer) 400
  9.  
  10. redis> INCRBY number 256 -- 将键的值加上 256
  11. (integer) 656
  12.  
  13. redis> INCRBY number 1000 -- 将键的值加上 1000
  14. (integer) 1656
  15.  
  16. redis> GET number
  17. "1656"

INCRBY 命令的作用正好相反,DECRBY 命令用于为整数值减去指定的整数减量,并返回键在执行减法操作之后的值:

  1. DECRBY key increment

以下代码展示了如何使用 DECRBY 命令去减少一个字符串键的值:

  1. redis> SET number 10086
  2. OK
  3.  
  4. redis> GET number
  5. "10086"
  6.  
  7. redis> DECRBY number 300 -- 将键的值减去 300
  8. (integer) 9786
  9.  
  10. redis> DECRBY number 786 -- 将键的值减去 786
  11. (integer) 9000
  12.  
  13. redis> DECRBY number 5500 -- 将键的值减去 5500
  14. (integer) 3500
  15.  
  16. redis> GET number
  17. "3500"

类型限制

当字符串键的值不能被 Redis 解释为整数时,对键执行 INCRBY 命令或是 DECRBY 命令将返回一个错误:

  1. redis> SET pi 3.14
  2. OK
  3.  
  4. redis> INCRBY pi 100 -- 不能对浮点数值执行
  5. (error) ERR value is not an integer or out of range
  6.  
  7. redis> SET message "hello world"
  8. OK
  9.  
  10. redis> INCRBY message -- 不能对字符串值执行
  11. (error) ERR wrong number of arguments for 'incrby' command
  12.  
  13. redis> SET big-number 123456789123456789123456789
  14. OK
  15.  
  16. redis> INCRBY big-number 100 -- 不能对超过 64 位长度的整数执行
  17. (error) ERR value is not an integer or out of range

另外需要注意的一点是,INCRBYDECRBY 的增量和减量也必须能够被 Redis 解释为整数,使用其他类型的值作为增量或减量将返回一个错误:

  1. redis> INCRBY number 3.14 -- 不能使用浮点数作为增量
  2. (error) ERR value is not an integer or out of range
  3.  
  4. redis> INCRBY number "hello world" -- 不能使用字符串值作为增量
  5. (error) ERR value is not an integer or out of range

处理不存在的键

INCRBY 命令或 DECRBY 命令遇到不存在的键时,命令会先将键的值初始化为 0 ,然后再执行相应的加法操作或减法操作。

以下代码展示了 INCRBY 命令是如何处理不存在的键 x 的:

  1. redis> GET x -- x 不存在
  2. (nil)
  3.  
  4. redis> INCRBY x 123 -- 先将键 x 的值初始化为 0 ,然后再执行加上 123 的操作
  5. (integer) 123
  6.  
  7. redis> GET x
  8. "123"

而以下代码则展示了 DECRBY 命令是如何处理不存在的键 y 的:

  1. redis> GET y -- y 不存在
  2. (nil)
  3.  
  4. redis> DECRBY y 256 -- 先将键 y 的值初始化为 0 ,然后再执行减去 256 的操作
  5. (integer) -256
  6.  
  7. redis> GET y
  8. "-256"

其他信息

属性
复杂度O(1)
版本要求INCRBY 命令和 DECRBY 命令从 Redis 1.0.0 开始可用。