对比
| 机制 | 原子性 | 网络往返 | 适用 |
|---|---|---|---|
| Pipeline | 无 | 1 次 | 批量读写/导入,允许部分失败 |
| MULTI/EXEC | 命令间不被插入;无回滚 | 1 次 | 简单批量 + WATCH 乐观锁 |
| Lua/EVAL | 整脚本原子 | 1 次 | 读判断写复合操作、限流、扣库存 |
选型示例(库存>0 才扣)
选型示例(库存>0 才扣)
# A. WATCH + MULTI:客户端要写重试循环
WATCH stock:1
GET stock:1
MULTI
DECR stock:1
EXEC
# B. Lua:一次调用,无重试(推荐)
EVAL "if tonumber(redis.call('GET', KEYS[1]) or '-1') > 0 then return redis.call('DECR', KEYS[1]) else return -1 end" 1 stock:1一句话选型:只图快=pipeline;逻辑简单且能接受重试=WATCH;并发正确性要求高=Lua。