1.可以一次执行多个命令,本质就是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。
开启事务执行
MULTI
执行事务完成队列中命令的执行
EXEC
什么是乐观锁?
乐观锁:每次去那数据的时候都认为别人不会修改数据,所以不会上锁,但是在更新的时候会去判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多去的使用类型,这样可以提交吞吐量。
乐观锁策略:提交版本必须大于记录当前版本才能执行更新。
更改数据之前,先加watch,然后再开启事务,如果在开启事务后,有人修改了数据,此时事务执行会失败。
需要先执行unwatch,然后再执行事务操作。(类似乐观锁)
2.事务的三个阶段:
开启:以MULTI开启一个事务
入队:将多个命令入队到事务中,降到这些命令不会立即执行,而是放到等待执行的事务队列里面
执行:由EXEC命令触发事务。
3.事务的三个特性:
单独的隔离操作:事务中的所有命令都会序列化、按照顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断
没有隔离级别的概念:队列中的命令没有提交之前不会实际的被执行,因为事务提交前任何指令都不会被实际操作,,也就不存在‘事务内的查询要看到事务里的更新,在事务外查询不能看到’这个让人万分头疼的问题
不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚