redis事务的三大特性:
1. 单独隔离操作。
redis事务中所有的命令都会序列化的,按顺序的执行。
事务在执行的过程中,不会被其他客户端的命令请求打断。
2. 没有隔离级别的概念。
队列中的命令在提交前不会被真正的执行。不存在”事务内的更新在事务内查询可以看到,
事务外的查询看不到事务内的更新“这种情况。
3. 不保证原子性。
redis事务在执行过程中如果有一条命令执行失败,那么其后的命令仍然可以执行,不会回滚。
redis事务的使用(redis命令不区分大小写):
multi:开启事务。
exec:提交事务。
discard:回滚事务。
事务使用过程中发生了错误?
redis事务的错误有两种,一是入队时发生了错误,二是执行过程中发生了错误。
-
入队时的错误: 开启事务后输入了错误的redis操作命令,导致入队时报错。那么此次事务所有的语句都不会被执行。
-
执行过程中发生错误: 事务内的语句在入队时都没有问题,但是提交后某一条语句报错。除了报错的语句不能执行之外,其他的所有语句都会执行。
redis事务的原理:
redis中的事务使用的是乐观锁的方式。每次有请求去读数据的时候不会上锁,但是当更新数据时,先利用版本号进行判断,如果在读取过程中,有其他请求修改过数据,那么此次请求的版本号就和数据的版本号不一致,数据则不能修改。乐观锁适用于多读的操作,可以提高吞吐量。
redis事务的使用之watch
可以在使用multi开启事务之前先使用watch key1 key2 … ,如果在事务执行提交之前,被监视的这些key的值发生了变化,那么此次事务提交失败。
开启另外一个redis客户端操作balance。
回到当前客户端提交事务。