淘宝团购秒杀1 高并发对数据库产生的压力
【下单0秒付款1秒的软件推荐 淘宝团购秒杀在哪里】2 竞争状态下如何解决库存的正确减少("超卖"问题)
对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis 。
重点在于第二个问题
常规写法:
查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数
文章插图
优化方案1:将库存字段number字段设为unsigned,当库存为0时,因为字段不能为负数,将会返回false
文章插图
优化方案2:使用MySQL的事务,锁住操作的行
文章插图
优化方案3:使用非阻塞的文件排他锁
文章插图
优化方案4:使用redis队列,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用(mysql事务在高并发下性能下降很厉害,文件锁的方式也是)
先将商品库存如队列
文章插图
抢购、描述逻辑
文章插图
模拟5000高并发测试
上述只是简单模拟高并发下的抢购,真实场景要比这复杂很多,很多注意的地方
如抢购页面做成静态的,通过ajax调用接口
再如上面的会导致一个用户抢多个,思路:
需要一个排队队列和抢购结果队列及库存队列 。高并发情况,先将用户进入排队队列,用一个线程循环处理从排队队列取出一个用户,判断用户是否已在抢购结果队列,如果在,则已抢购,否则未抢购,库存减1,写数据库,将用户入结果队列 。
测试数据表
文章插图
文章插图
文章插图
文章插图
秒懂生活扩展阅读
- 京东双11分期付款怎么支付最划算?
- 拼多多团长红包怎么用?锁粉下单神器!
- 新手抖音怎么发大于60秒 抖音怎样发长视频作品
- 淘宝无法使用微信支付的真实原因 淘宝可以用微信付款吗怎么付
- 买手机办理分期付款的步骤 网上手机可以分期付款买吗
- 电商订单系统详解 商品下单是什么意思
- 圆通货到付款可以用支付宝付款吗
- 支持花呗收款的平台 淘宝付款方式没有花呗如何显示
- 网上分期付款买手机骗局 哪里买手机可以分期付款的
- 天猫超市付款之后还能取消订单吗?