- Redis事务是一个单独的隔离操作:事务中所有的命令都会被先序列化,然后按照顺序进行执行。在执行的过程中,不会被其他的客户端发送过来的请求而打断。
- redis 事务的主要目的:串联多个命令,从而防止别的命令插队
创建事务
Redis 中的事务有 Multi,Exec 和 Discard 三个指令,在 redis 中,从输入了 Multi 指令开始, 后续指令都会进入到命令队列
中,直到最后输入Exec
,redis 会将之前命令队列
中的所有命令按照顺序依次执行。
如果在组队的过程中,发现了错误,并且需要放弃组队,那么可以通过discard
命令来放弃组队。
会删除
命令队列
中的命令,并退出组队状态
错误处理
将错误分为组队阶段错误
和执行阶段错误
- 组队阶段错误:在组队的阶段,出现了类似“语法出错”这样的问题
- 执行阶段错误:组队的阶段没有问题,但是在事务的执行过程中,出现了错误。
两种错误方式的回滚方式并不相同
- 如果是
组队阶段错误
:那么执行的时候,整个命令队列
都会被取消,所有的命令都不会被执行 - 如果是
执行阶段错误
:那么执行的时候,除了出错的命令以外,其他的所有命令都会被成功执行,不会进行回滚。
watch 和 unwatch
redis事务三特性
单独的隔离操作
:事务中,所有的命令都会被序列化,然后按照顺序执行,不会被其他客户端的命令所打断不存在隔离级别的概念
:命令队列
中的命令在没有提交之前都不会被执行,事务在提交之前的任何指令都不会被实际执行。不保证事务原子性
:事务中如果有一条命令执行失败,那么其后正确的命令仍然会被继续执行,不会发生回滚。