悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
即上锁------>操作------->解锁以便给下一个人使用
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。
比如,第一个人付款成功,此时余额的版本号就会变成v1.1,第二个人去付款的时候,发现自己手上持有的版本号是v1.0 ,不是最新的v1.1,此时他就会替换成v1.1版本后再进行判断余额是否足够,从而避免超卖问题。