*Redis DECR 命令

将 key 中存储的数字值减 1。


*语法

DECR key

*参数说明

参数 类型 必填 说明
key String 键名,value 必须是整数或不存在

*返回值

条件 返回值
递减成功 返回递减后的新值(Integer)
key 不存在 先设为 0 再递减,返回 -1
value 非整数 返回错误

*时间复杂度

O(1)

*

*示例

> SET counter 10
OK
> DECR counter
(integer) 9

# key 不存在
> DECR newcounter
(integer) -1

# 非数字
> SET mykey "hello"
> DECR mykey
(error) ERR value is not an integer or out of range

*常见错误

  1. value 非整数或超出 64 位范围:返回错误。
  2. 浮点数不能用 DECR:浮点数用 DECRBYFLOAT(不存在,需用 INCRBYFLOAT key -increment)。

*最佳实践

  1. 库存扣减:DECR 实现原子库存扣减,DECR stock:1001 返回 -1 表示超卖(需配合判断)。
  2. 限流计数器:窗口内 DECR 配额,归零后拒绝请求。

*FAQ

Q: DECR 和 INCR 是对称的吗? A: 是。DECR 是 INCR 的逆操作。也可用 INCRBY key -1 替代 DECR。

Q: 库存扣减后如何判断售罄? A: DECR stock:1001 返回负数说明超卖,业务层需回滚或拒绝。更安全的做法是用 Lua 脚本先判断再扣减。