悲观锁
数据库隔离级别是读提交的前提下。
1 |
|
乐观锁
利用行锁及原子性,根据update的结果(更新行数)来决定是否更新成功。
1 |
|
版本号
基于版本精准控制更新,会影响并发,适用于并发不高的场景(比如后台配置)
1 |
|
状态机
状态变化,严格根据状态图,控制只有指定状态可以变更为指定状态
1 |
|
对比如下,可能会导致其他不支持的状态变化
1 |
|
余额
1、扣减余额,不支持负数余额
1 |
|
2、如果需要得到扣减后的余额,除了可以使用悲观锁方式,还可以利用事务行锁
数据库隔离级别是读提交的前提下。
1 |
|
3、如果需要得到扣减后的余额,除了可以使用悲观锁方式,还可以借鉴CAS算法原理(结合版本号),例如:
1 |
|
MySQL锁
mysql> select * from information_schema.INNODB_LOCKS