乐观锁,悲观锁,防重表的思考

乐观锁: 

java当中 cas属于 乐观锁

数据库中一般通过 version 版本号实现

悲观锁:

java当中 synchronized 和 Lock

数据库中通过 select ...  where id=?   for update 实现

防重表:

通过建立一个字段或者多个字段的唯一索引,来防止并发情况下,数据只有一条记录能功能.


乐观锁的使用场景:

并发不超过20% 这句话很笼统

举个栗子:

比如 git代码 push到远程仓库,这种场景冲突的概率小于20%,就可以利用乐观锁

悲观锁:

比如转账这种场景,必须读取最新的金额去扣减

防重表:

悲观锁也会产生死锁,有时候,利用防重表的唯一索引,可以实现 唯一性的数据在并发环境下,只插入一条. 利用这一点和 扣减库存或者 扣减金额

在同一个事务中,来解决超卖或者扣减金额有错的情况下很有效.

你可能感兴趣的:(乐观锁,悲观锁,防重表的思考)