主题
事务
Redis 事务是一组按顺序执行的命令,确保这些命令要么全部成功执行,要么全部不执行。事务通过 MULTI
、EXEC
等命令实现原子性操作。
主要命令
- MULTI:标记事务的开始,后续的命令将被排队,直到执行
EXEC
。
bash
MULTI
- EXEC:执行事务队列中的所有命令,如果其中一个命令执行失败,其他命令仍然会被执行。
bash
EXEC
- DISCARD:放弃事务,清空命令队列,不执行任何命令。
bash
DISCARD
WATCH:监视某个或多个键,当被监视的键发生变化时,事务会失败。
bashWATCH key [key ...]
工作流程
- 事务通过
MULTI
命令开始。 - 向 Redis 发送多个命令,这些命令会进入事务队列,但不会立即执行。
- 执行
EXEC
命令时,所有命令会按顺序执行。如果没有发生错误,事务会提交执行。 - 如果有任何键被
WATCH
监控,并且在事务执行之前这些键的值发生了变化,事务将自动失败。
特点与限制
- 原子性:事务中的所有命令要么都成功执行,要么都不执行。
- 隔离性:事务中的命令在被执行前不会被其他客户端的命令影响,直到
EXEC
被调用。 - 没有回滚机制:一旦事务开始,所有命令会按顺序执行,不能回滚。
注意事项
- 事务执行期间,Redis 会依次执行每个命令,但不保证命令执行的时序顺序(例如并发写操作时)。
- 事务中的命令是批量执行的,但如果在执行期间发生错误,事务中的所有命令都会执行。
- 使用
WATCH
可以监控某个键的变化,确保在执行事务前该键未被其他客户端修改。
应用场景
适用于需要保证操作原子性的一系列命令场景,如用户余额扣款、订单处理、批量更新等,确保在高并发环境下数据一致性。