简单说明乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁

2018-12-10  本文已影响31人  林万程

概念

可重入

获得锁的程序因为断网等原因离开后可以重入

锁的实现

1 乐观锁

通过版本字段手动实现,适用写少的场景
写多的冲突多了不断重试反倒低性能
冲突率<20%时使用,重试次数>=3
update …
set … version=version+1
where id=#{id} and version=#{version};

2 悲观锁

无版本字段,其他可读不可改,分两种

2.1 共享锁

其他共享锁可以SELECT进来
SELECT … lock in share mode;

2.2 排他锁

共享锁悲观锁都不能SELECT进来
SELECT … for update;
分两种

2.2.1 行锁

使用索引
exists
SELECT … FORCE INDEX WHERE …

2.2.2 表锁

全表扫描
in

死锁

死锁条件

互斥排他
保持着排他资源又提出新资源请求
不可剥夺
环路

死锁避免

同顺序
一次性锁定
细粒度锁定(行锁)

上一篇 下一篇

猜你喜欢

热点阅读