• Redis事务是一个单独的隔离操作:事务中所有的命令都会被先序列化,然后按照顺序进行执行。在执行的过程中,不会被其他的客户端发送过来的请求而打断。
  • redis 事务的主要目的:串联多个命令,从而防止别的命令插队

创建事务

Redis 中的事务有 Multi,Exec 和 Discard 三个指令,在 redis 中,从输入了 Multi 指令开始, 后续指令都会进入到命令队列中,直到最后输入Exec,redis 会将之前命令队列中的所有命令按照顺序依次执行。

如果在组队的过程中,发现了错误,并且需要放弃组队,那么可以通过discard命令来放弃组队。

会删除命令队列中的命令,并退出组队状态

image.png

错误处理

将错误分为组队阶段错误执行阶段错误

  • 组队阶段错误:在组队的阶段,出现了类似“语法出错”这样的问题
  • 执行阶段错误:组队的阶段没有问题,但是在事务的执行过程中,出现了错误。

两种错误方式的回滚方式并不相同

  • 如果是组队阶段错误:那么执行的时候,整个命令队列都会被取消,所有的命令都不会被执行
  • 如果是执行阶段错误:那么执行的时候,除了出错的命令以外,其他的所有命令都会被成功执行,不会进行回滚。

image.png
image.png

watch 和 unwatch

image.png

redis事务三特性

  • 单独的隔离操作:事务中,所有的命令都会被序列化,然后按照顺序执行,不会被其他客户端的命令所打断
  • 不存在隔离级别的概念命令队列中的命令在没有提交之前都不会被执行,事务在提交之前的任何指令都不会被实际执行。
  • 不保证事务原子性:事务中如果有一条命令执行失败,那么其后正确的命令仍然会被继续执行,不会发生回滚。