redis事务

93 阅读1分钟

事务是一组命令

通过multi命令告知服务器

我接下来都一组命令是捆绑到一起的,必须全部执行或全部不执行(multi - exec)。

image.png

可以看到,在遇到exec之前,无论命令是什么都返回queued,这就是说redis将这一组命令先存入了队列,并没有立即执行,只有接收到exec后才会依次执行队列中的命令。

可以验证一下

时间客户端1客户端2
T1multi
T2set age 1
T3get age
T4get age
T5exec
T6get age

image.png
image.png

什么时候事务不会得到执行?

开启事务前,先watch某个键,如果在事务执行前,这个键被其他客户端修改了,那么事务就不会执行。

还是上面的命令,只是先watch age

image.png

image.png

总结

  • 通过multi - exec 命令组开启-执行事务
  • 组成事务的一组命令会先存入队列,在exec命令之后依次执行
  • 如果watch了某个键,并且这个键被其他客户端修改了,那么事务不会得到执行