事务
是一个单独的隔离操作(串联多个操作)
事务中所有命令都会序列化,按顺序执行
执行过程中不会被其他命令中断
命令
- multi
开启事务,组队阶段,将命令放入队列中,但是并没有开始执行 - exec
开始执行,执行阶段 - discard
撤销组队,全部放弃(在开始执行之前执行)
异常情况
组队阶段出现异常(可以理解为:编译报错):撤销组队,所有命令都不会执行
执行阶段出现异常(可以理解为:执行报错):会继续执行其他命令(不具备原子性和一致性???)
事务之间冲突
Redis解决冲突方式:乐观锁(给数据加版本号,每次修改数据同时修改版本号,check-and-set,只有修改数据的时候才会检查版本是否一致)
若修改数据时,检查版本与所持有的数据版本不一致,则事务被打断。
- 可以通过命令watch监视一个或多个key,监视其变化
- unwatch取消监视
Redis事务特性(和MySQL的ACID不一样)
- Isolate 隔离性
- 没有隔离级别
- 不保证原子性