Redis中的事务是一个单独隔离的操作,事务中的所有命令都会被序列化、按顺序的执行,事务在执行的过程中,不会被其他客户端发来的请命令请求打断。Redis中事务的主要作用就是串联多个命令防止别的命令插队。
Redis中事务操作通过三个关键词来实现:Multi、Exec、discard,Multi是组队阶段,Exec是执行阶段,discard可以在组队的过程中放弃组队。
注意:在组队的时候有任何一个命令失败,则组队的队列会被取消,在执行的时候某个命令出现了错误,只有出现错误的事务不会执行,其他的事务都会执行,不会回滚。
事务的冲突问题
通过乐观锁和悲观锁解决,具体详见Mysql篇。
乐观锁过程:在执行multi之前,先执行watch key命令监视key,可以监视一个或者多个key,如果在事务执行前这个key被其他命令改动,那么事务将会被打断。
Redis中事务的三大特性
- 单独的隔离操作:
事务中的所有命令都会序列化、按顺序的执行,事务在执行的过程中,不会被其他客户端发送来的命令请求打断。 - 没有隔离级别的概念:
队列中的任务没有提交之前都不会被实际执行,因为事务提交前任何指令都不会被实际执行。 - 不保证原子性:
事务中如果一条命令执行失败,其后的命令仍然会被执行,没有回滚。