语法

1
DECRBY key decrement

可用版本

≥ 1.0.0

时间复杂度

$O(1)$

ACL 类别

@write@string@fast

将存储在 key 的数字值减去 decrement。如果 key 不存在,则先将 key 的值初始化为 0,然后再执行 DECRBY 操作。如果 key 包含一个错误类型的值或包含一个不能表示为整数的字符串,则返回错误。这个操作仅限于 64 位有符号的整数。

返回值

返回一个整数,表示执行 DECRBY 操作后,key 对应的值。

示例 1

对已存在且其值类型为整数的 key 进行 DECRBY 操作:

1
2
3
4
5
redis> SET cnt 1000
OK
redis> DECRBY cnt 1
(integer) 999
redis>

示例 2

对不存在的 key 进行 DECRBY 操作:

1
2
3
4
5
6
7
redis> EXISTS cnt
(integer) 0
redis> DECRBY cnt 1
(integer) -1
redis> GET cnt
"-1"
redis>

示例 3

对已存在、但值类型为列表的 key 进行 DECRBY 操作:

1
2
3
4
5
6
7
8
9
redis> LPUSH user_list johnsonlin
(integer) 1
redis> TYPE user_list
list
redis> LRANGE user_list 0 10
1) "johnsonlin"
redis> DECRBY user_list 10
(error) WRONGTYPE Operation against a key holding the wrong kind of value
redis>

示例 4

对已存在且其值为 $-2^{63}$(即 64 位有符号整数的最小值 -9223372036854775808)的 key 进行 DECRBY 操作,导致整数溢出错误:

1
2
3
4
5
redis> SET bigint_min "-9223372036854775808"
OK
redis> DECRBY bigint_min 1
(error) ERR increment or decrement would overflow
redis>

64 位有符号整数的数值范围:[-9223372036854775808, 9223372036854775807]

(END)