悲观锁和乐观锁的使用场景及具体实现
悲观锁对于每次数据操作都认为会被其他事物修改,所以使用所机制锁住当前数据项,其他修改事物在此次数据操作完成之前都要等待。
悲观锁对于数据并发冲突可能性比较高的情况下使用,写操作比较多,冲突性大会导致上层不断地retry消耗性能。
乐观锁对于每次数据操作都认为不会被其他事务所修改,没有加锁,但是使用版本号标记,每次修改前会判断版本号(判断在这期间有没有人更新过数据),版本号一致就进行数据修改,不一致就返回更新错误。
乐观锁对于数据并发冲突可能性比较小的情况下使用,写操作比较少,冲突性小省去了锁的开销,提升了性能加大了系统整个的吞吐量。
建议:通过挑选乐观锁,可以减小锁力度,从而提升吞吐.乐观锁需要灵活运用,现在互联网高并发架构中,收到fail-fast思路的影响,悲观锁已经非常少见了。