CAS 扣库存
CAS 扣库存
WATCH stock:1001
GET stock:1001 # 读到 5,客户端判断可扣
MULTI
DECRBY stock:1001 1
EXEC # 若期间 stock:1001 被改 -> (nil),回到 WATCH 重试| 生命周期 | WATCH 的监视在 EXEC/UNWATCH/连接关闭后清除 |
|---|---|
| 失败语义 | EXEC 返回 nil = 有人改过,什么都没执行 |
| 重试 | 由应用负责循环:重读->重算->重试,限制次数防饿死 |
高竞争场景 WATCH 重试率高,不如 Lua 一把梭;WATCH 优点是不需要写脚本、逻辑在客户端更直观。