事务是一组命令
通过multi命令告知服务器
我接下来都一组命令是捆绑到一起的,必须全部执行或全部不执行(multi - exec)。
可以看到,在遇到exec之前,无论命令是什么都返回queued,这就是说redis将这一组命令先存入了队列,并没有立即执行,只有接收到exec后才会依次执行队列中的命令。
可以验证一下
| 时间 | 客户端1 | 客户端2 |
|---|---|---|
| T1 | multi | |
| T2 | set age 1 | |
| T3 | get age | |
| T4 | get age | |
| T5 | exec | |
| T6 | get age |
什么时候事务不会得到执行?
开启事务前,先watch某个键,如果在事务执行前,这个键被其他客户端修改了,那么事务就不会执行。
还是上面的命令,只是先watch age
总结
- 通过multi - exec 命令组开启-执行事务
- 组成事务的一组命令会先存入队列,在exec命令之后依次执行
- 如果watch了某个键,并且这个键被其他客户端修改了,那么事务不会得到执行