设想以下场景:

假设本来有10000元余额,

有三个知道密码的人同时结账,就会发生冲突问题。

 

 


 

 

 

 

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。

即上锁------>操作------->解锁以便给下一个人使用

 


 

 

 

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量

 

比如,第一个人付款成功,此时余额的版本号就会变成v1.1,第二个人去付款的时候,发现自己手上持有的版本号是v1.0 ,不是最新的v1.1,此时他就会替换成v1.1版本后再进行判断余额是否足够,从而避免超卖问题。

 

 

 


WATCH key [key ...]

定义:在执行multi之前,先执行watch key1 [key2],可以监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

 

 

 

有以下两个事务,假设事务1先执行。事务2在准备执行的时候,因为k1已经被事务1更改,所以事务2不会执行成功(显示nil)

 

 

unwatch

取消 WATCH 命令对所有 key 的监视。

posted on 2022-07-03 13:17  西凉#  阅读(24)  评论(0编辑  收藏  举报