是什么
可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行执行而不会被其他命令插入,不许加塞。
常用命令
- MULTI
- EXEC
- disCARD
- WATCH
五个case
-
正常执行
使用MULTI命令输入Redis事务。该命令始终以答复OK。此时,用户可以发出多个命令。Redis不会执行这些命令,而是将命令放入队列中。一旦调用EXEC,将执行所有命令。
> MULTI OK > INCR foo QUEUED > INCR bar QUEUED > EXEC 1) (integer) 1 2) (integer) 1
-
放弃事务
可以使用disCARD来中止事务。在这种情况下,不执行任何命令,连接状态恢复为正常。
> SET foo 1 OK > MULTI OK > INCR foo QUEUED > disCARD OK > GET foo "1"
-
全体连坐
命令无法进入加入到队列,执行exec命令后会终止所有命令
-
冤头债主
命令正常加入队列中,在exec命令执行后发生错误,会正常执行其他正确命令
-
watch监控
WATCH用于为Redis事务提供Check And Set(CAS)行为,防止加塞修改。
监控被watch的键,在exec命令之前任何一次修改了被监视的键,则整个事务中止。exec命令返回null
一旦执行exec命令,之前所加的监控锁都会被取消小总结:watch指令,类似于乐观锁,事务提交时如果Key的值已经被改变,整个事务便都不会执行。通过watch命令监控了多个Key其中任意有一个Key的值被修改,exec命令执行的事务都将被放弃。
三阶段
- 开启 通过MULTI开始一个事务
- 入队 将多个命令加入队列中
- 执行 通过EXEC命令触发事务
三特性
-
单独隔离操作
事务中的命令会序列化、按顺序地执行。事务执行过程不会被其他客户端命令打断
-
没有隔离级别概念
队列中的命令在exec事务触发之前不会被实际执行
-
不保证原子性
当命令成功被加入到队列之后,在exec命令触发事务之后发生执行失败,其他命令还是会正常执行,不会回滚。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。