redis事务

redis单条命令保证原子性,但是redis事务不保证原子性

redis事务本质:一组命令的集合

一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行

redis事务特性:

  1. 一次性
  2. 顺序性
  3. 排他性

理解redis事务

可以把redis的事务看成一个队列,先入先出,顺序弹出,事务一旦执行,就不可以被其他redis命令打断

关于redis事务的三个重要保证

  • 批量操作在发送 EXEC 命令前被放入队列缓存
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中

redis事务执行的过程:

  • 开启事务(multi)
  • 命令入队(常规redis命令)
  • 执行事务/放弃事务(exec/discard)

redis事务执行演示


我们可以看见图中的事务是按照命令输入顺序执行的,如同队列一样

放弃事务


如果我们在事务末尾放弃事务,则事务中的命令均不会被执行,全部被放弃

事务错误

编译型异常(输入的代码有问题,命令有错误),事务中所有命令都不会被执行


在这个图中我们可以看见,在redis中写入错误的redis语法的时候,redis事务入队都无法通过,直接抛出错误,后面就算执行也会让全部命令都放弃执行,并抛出错误

运行时异常(1/0),如果事务队列中存在语法正确,逻辑错误,那么执行命令的时候,其他命令可以正常执行,错误命令抛出异常


从这个图我们可以看出,在redis事务中,只要保证redis语法没错,那么就可以顺利入队,只不过执行的时候,会抛出对应命令的错误而已,但是其他命令不会中断

posted @ 2022-07-11 16:51  影梦无痕  阅读(34)  评论(0)    收藏  举报