乐观锁和悲观锁

高并发处理之乐观锁与悲观锁
在高并发场景如商品秒杀中,数据层面可利用乐观锁解决问题。乐观锁认为数据更新大多不冲突,提交时检测冲突;悲观锁则对数据操作持保守态度,先加锁再操作。乐观锁实现简单但有优缺点,如并发量高时大量请求可能失败。

当系统遇上了高并发时处理方法之一:乐观锁和悲观锁

当今时代,很多小程序或者APP都有出现过很多商品秒杀的功能(比如高铁火车抢票等),那么在进行秒杀的时候,多人使用系统,必定拥有的就是高并发的问题出现,能知道的在数据从层面的解决方法之一就是利用乐观锁。
这种方法实现起来最简单
Update product set num=num-1 where num-1>0 and pid=#{pid}
在设置num的时候应该注意的是,不要写num=#{num},这样子会被覆盖。(并发还是会有问题)

乐观锁和悲观锁分别是什么?
乐观锁:顾名思义,系统认为数据的更新在大多数情况下进行的时候是不会冲突的,只在数据库更新操作提交的时候才对数据做冲突检测,如果检测的结果与预期数据不一致,则返回失败信息。
实现方法:
1、借助数据库表增加一个版本号的字段 -version
2、时间戳
看了一大堆的文字到最后还是觉得看不懂,好吧,姑奶奶给你们解释解释一下乐观锁实现方法。

对于乐观锁的实现方法,我是这样子理解的,相当于一群人去银行办理业务,首先在进门的时候就要先拿到一个序号(这个序号我们可以把它理解为是版本号或时间戳),系统序号自动+1,这时候进门的每个人都会拿到自己的号码,等待办理业务的窗口叫号,叫到相应的序号相应的人就去办理(这时候这个操作就相当于我们系统,拿到版本号或者是时间戳对应上的用户就可以进行购买成功),到达了一定的数量后(相当于库存的数量),系统就难以出现说库存超卖的情况了。

优点:不会影响请求的性能,当产生并发且并发量较小的时候也只有少部分的请求失败。
缺点:增加数据库冗余,且当应用并发量高时,version频繁变化,则导致大量请求失败,影响系统可用性。

悲观锁:对数据进行操作更新时,对操作持悲观保守的态度,认为产生数据的冲突的可能性很大,需要先对请求的数据进行加锁再进行相关操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值