1.数据库锁分为悲观锁和乐观锁,悲观锁又分有下面三种:
- Record Lock:单个行记录的锁
- Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
- Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身
2.三种替代悲观锁的方法
- 使用redis来做分布式锁,redis采用多个来进行分片,其中一个redis挂了也没有关系,重新争抢就可以了
- 使用主键防重方法,在方法的入口处使用防重表,能够拦截所有重复的订单,当重复插入时数据库会报一个重复错,程序直接返回
以上三种方式都必须要有过期时间,当锁定某一资源超时的时候,能够释放资源让竞争重新开始