mysql-lock

Table of Contents

乐观锁实践

mysql的锁是悲观的,具体实现不清楚(估计是类似LockSuport.park()的唤醒机制)
假设如果某个业务对数据行的写写操作很多,这样就考虑乐观锁实现,但是不代表所有并发较高的 操作都需要乐观锁,失败重试的逻辑需要业务侧自行实现

  1. 可以采用自增的version字段
UPDATE
sku
SET
num = xxx,version = 3
WHERE
id = xxx
AND 
version = 2;
  1. 加入version字段,并发较高时会导致失败数升高,减少锁粒度
UPDATE
sku
SET 
num = num - 1
WHERE
id = xxx
AND
num - 1 > 0

可以预见在存在存量概念的时候,可以通过提升锁粒度减少加锁失败