Redis 事务
用 MULTI/EXEC 打包命令,理解 Redis 事务的「弱」语义。
Key PointsRedis 事务保证「命令按顺序一次性执行」,但不支持中途回滚。
MULTI / EXEC
Shell
MULTI
SET a 1
INCR a
GET a
EXEC # 一次性执行队列里的命令Output
1) OK
2) (integer) 2
3) "2"WATCH 乐观锁
Shell
WATCH balance
# 如果 balance 在 EXEC 前被别的客户端改了,EXEC 返回 nil(事务 abort)
MULTI
DECRBY balance 10
EXECRedis transactions do NOT roll back — if one command errors, earlier ones stay applied. They give isolated execution, not ACID rollback. For complex logic use Lua.
MULTI / EXEC
Shell
MULTI
SET a 1
INCR a
GET a
EXEC # 一次性执行队列里的命令Output
1) OK
2) (integer) 2
3) "2"WATCH 乐观锁
Shell
WATCH balance
# 如果 balance 在 EXEC 前被别的客户端改了,EXEC 返回 nil(事务 abort)
MULTI
DECRBY balance 10
EXECRedis 事务不支持回滚——某条命令出错(如类型不对)前面的已执行结果不会撤销。它提供的是「隔离执行」而非 ACID 的原子回滚。需要复杂事务逻辑用 Lua 脚本。