redis学习(013 实战:黑马点评:优惠券秒杀——超卖问题解决方案)

黑马程序员Redis入门到实战教程,深度透析redis底层原理+redis分布式锁+企业解决方案+黑马点评实战项目

总时长 42:48:00 共175P

此文章包含第52p-第p53的内容


问题演示

在这里插入图片描述

使用jmeter测试两百个并发请求

在这里插入图片描述
在这里插入图片描述

我们设置初始库存为100,测试请求200个 预期失败50%,这里我们发现失败率是45%,库存变成了-9,发生了超卖问题
在这里插入图片描述

在这里插入图片描述

卖出109件
在这里插入图片描述

超卖的原因分析

正常的流程
在这里插入图片描述
超卖的流程
在这里插入图片描述

解决方案 加锁

悲观锁介绍

悲观锁是会串行执行,性能不好,高并发场景下不适合
在这里插入图片描述

乐观锁介绍

乐观锁 只是在修改之前看一下之前的库存跟现在是否有区别,有区别代表在我之前有人已经修改了

在这里插入图片描述

乐观锁的两种方法-版本号法

版本号法
在这里插入图片描述

乐观锁的两种方法-cas法

cas法 不使用版本号 直接用库存进行判断就行
在这里插入图片描述

修改代码解决超卖

第一种方案 修改mybatis-plus的sql让库存等于之前查到的才可以修改

这么修改sql方法即可
在这里插入图片描述

测试

我们设置初始库存为100,测试请求200个 预期失败50%,这里我们发现失败率是89.9%,库存变成了79,虽然没有超卖,但是失败率大大提升,成功率太低
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二种方案 修改mybatis-plus的sql让库存大于0才可以修改

这里我们可以修改sql 让库存大于0才可以进行修改
在这里插入图片描述

测试

我们设置初始库存为100,测试请求200个 预期失败50%,这里我们发现失败率也是50%,库存变成了0,完美达到了预期效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述
也可以使用分段锁 将100个库存分到10张表里,这样相当于10个人同时抢,成功率提升10倍
在这里插入图片描述
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值