Redis 事务可以一次性执行多个命令,并且带有以下几个重要保证:
- 批量操作在发送 EXEC命令前被放入队列缓存
- 收到 EXEC 命令后进入食物执行,事务中任意命令执行失败不影响其余命令的执行
- 在事务执行过程中,其他客户端提交的命令请求不会插入到事务执行命令序列中
一个事物从开始到执行会经历以下三个阶段:
- 开始事务
- 命令入队
- 执行事务
事务执行时必须以 MULTI 开始一个事务,然后将多个命令入队到事务中,最后由 EXEC 命令触发事务,一并执行事务中的所有命令。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。其实,事务可以理解为一个大包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败并不会导致前面已执行指令的回滚,也不会造成后面未执行指令的停止。
| 命令 | 说明 | 示例 | |
|---|---|---|---|
| MULTI | 标记一个事务块的开始 | ![]() | |
| DISCARD | 取消事务,放弃执行事务块内的所有命令 | ||
| EXEC | 执行所有事务块内的命令 | ![]() | |
| WATCH key [key ...] | 见识一个或多个 key,如果在事务执行之前这个 key 被其他命令改动,那么事务将被中断 | ![]() | |
| UNWATCH key [key ...] | 取消 WATCH 命令对所有 key 的监视 | ![]() | |
Redis事务提供了一种批量执行命令的方式,保证了命令的顺序执行,但不保证原子性。从MULTI开始,通过EXEC执行,期间可以使用DISCARD取消事务。WATCH用于监控键,若有变动则取消事务。事务执行期间,外部命令不会插入,确保执行顺序。关键词包括Redis、事务、原子性、批量操作。





1471

被折叠的 条评论
为什么被折叠?



