我最近在开发项目时,遇到一个场景,我完成商品的售卖后需要减掉数据库对应的值。
像这种业务场景可能会很危险,因为电商平台更新商品库存的并发量高,并发更新可能会导致数据不一致的问题,例如:丢失修改,不可重复读,读“脏”数据。
可以上锁来解决上面业务场景面临的问题。
悲观锁
假设并发访问情况下,数据很有可能被其他事务修改,因此在访问数据时,直接锁住数据,防止其他事务对其进行修改。
悲观锁也会面临一个问题,因为锁数据的特性,可能会引发死锁。
死锁
乐观锁
相对而言乐观锁就显得温柔许多,它类似于公共卫生间收拾卫生的阿姨,在访问卫生间的时候,不会直接进去收拾卫生。而是会敲门判断里面是否有人,如果没人阿姨会进去收拾,但有人的话阿姨会回滚事务,并尝试重新进去收拾卫生。