概念
-
redis事物是什么?
redis事物是一个单独隔离的操作,它将一系列指令按需排队并执行,期间不会被其他客户端的指令插队。 -
redis事务三大指令multi、exec、discard是什么?
- multi: 开启事物
- exec: 执行事物
- discard: 取消事物
通过multi,当前客户端就会开启事务,后续的指令都会安迅存到队列中。当用户键入exec后,这些指令都会按顺序执行。
若开启multi后输入若干指令,在键入discard,则之前的指令通通取消执行
-
三大特性
- 单独隔离:不能插入其他指令
- 没有隔离级别概念:事物提交前,指令都不会执行
- 无原子性: 指令异常,将不会影响上一条或下一条指令的执行。
事务的错误和回滚的情况
1.组队时错误
组队时输入错误的指令,redis会之间将所有指令都会失效,因为这是一个问题队列。
如下
2.执行命令时错误
执行时错误比较特殊,他在按序处理所有指令,遇到错误就按正常流程处理继续执行下去。
watch 命令
Redis 提供redis 来提供乐观锁,类似于CAS(check-and-set)
watch 命令是一种乐观锁实现,redis 在修改数据的时候会检测数据是否被修改,如果修改了,则执行失败。
监控失效时机
- 一旦执行EXEC后, 之前加watch xxx监控(乐观锁)将被取消。
- 一旦客户端丢失连接,所有的watch xxx 将被取消
- 执行 UNWATCH
事物总结
- 以multi开启一个事物
- 将多个命令入队到事物中
- 由EXEC命令执行事物