首页/数据/数据库速查/批量执行三件套:Pipeline / 事务 / Lua 选型
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条Redis 命令96 条
Redis 运维与场景124 条

批量执行三件套:Pipeline / 事务 / Lua 选型

同样想减少往返或保证原子,三种机制语义完全不同:Pipeline 只是打包、MULTI/EXEC 是弱事务、Lua 是原子复合操作;按「是否要原子 + 是否有读判断写」来选。

数据库速查数据更新于 2026-10-12

对比

机制原子性网络往返适用
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。

易错点

  • 用 pipeline 实现扣库存:并发下超卖
  • 把 Lua 当万能:脚本越写越大,阻塞与维护成本同步上升

数据来源与参考

  • Redis 官方文档: Transactions
  • Redis 官方文档: Pipelining
  • Redis 官方文档: EVAL

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌