名称 | 描述 |
---|---|
DISCARD | 取消事务,放弃执行事务块内的所有命令 |
EXEC | 执行所有事务块内的命令 |
MULTI | 表示一个事务块的开始 |
UNWATCH | 取消WATCH命令对所有keyd监控 |
WATCH eye [key…] | 监视一个或多个kye,如果在事务执行之前(或这些)key被其它命令所改的,那么事务将会被打断 |
redis会将一次事务的所有命令放在一个队列中,一次性
redis没个命令都是原子的,如果多个命令组合到一起想要一起执行就需要事务了。
如果事务中一个命令有错误,整个事务失败
针对运行以后的异常,错误的命令执行失败,成功的就执行成功,因为与传统的数据库事务不一样,redis是不支持回滚的
Redis使用watch来提供乐观锁定,类似于CAS
乐观锁:每次去拿谁的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断胰腺癌在此期间有没有去更新这个数据。(乐观锁策略:提交版本必须大于记录当前的版本才能更新)
悲观锁:每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁
因为第二个客户端在事务还没有执行完之前就修改类balance的数据,导致balance的版本升高,所以事务就会失效,UNWATCH就可以放弃监控(放弃加锁)