首页/数据/数据库速查/MULTI/EXEC 事务(入队与执行)
Redis 运维与场景124 条

MULTI/EXEC 事务(入队与执行)

MULTI 之后命令先入队,EXEC 时按顺序原子执行(执行期间不被其他客户端命令插入);DISCARD 放弃事务。注意:Redis 事务没有回滚,运行时错误不影响已执行部分。

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

基本用法

基本用法
MULTI
SET account:1 900
INCRBY account:2 100
EXEC          # 返回数组:[OK, 100]

# 放弃事务
MULTI
SET k v
DISCARD       # 清空入队命令,连接恢复普通模式
入队错误命令名/参数个数错:EXEC 时整队拒绝(EXECABORT)
运行时错误如对字符串做 INCR:该条报错,其余照常执行
原子性边界只保证命令序列不被插入,不保证全成功
需要「先读后写不被打断」时配合 WATCH(乐观锁)或直接用 Lua。

易错点

  • 以为 EXEC 报错会回滚:Redis 没有回滚,已执行命令的结果保留
  • 把需要读结果才能决定的逻辑放进事务:MULTI 里的命令看不到彼此结果,要用 WATCH 或 Lua

数据来源与参考

  • Redis 官方文档: Transactions
  • Redis 官方文档: MULTI

相关工具

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