本书未发布

秒杀系统解决超卖

未匹配的标注

前提

秒杀活动一定是高并发的,在那一秒,无数的用户抢购商品,如果我们每个请求过来,都要与数据库进行交互,那么 Mysqt 一定是扛不住的,所从我们的秒杀要基于 redis 来进行。 Redis 单机支撑每秒几万的写入。这样性能不是问题。在我们发布秒杀活动的时候,妥将我们的商品与库存写入 redis 。当用户进行抢购的同时,我们直接对 redis 的库存进行操作。扣减 redis 内库存数量后,发送扣减成功的消.息到消息队列,由后续的订单服务,支付服务之类的进行处理。最后再由 mysql 进行库存扣减。

解决超卖

将库存名领加载到了 Redis,必须要保证精确计数。如果 redis 的库存数量错误,就会导致超卖的问题产生。在秒杀的时候分为两步。
第一步:判断库存名额是否充足。
第二步:减少库存名额,扣减成功就是抢到。
我们必须要保征两种操作的原子性。所从我们要使用 lua 脚本, redis 的特性,专门支持原子。

解决少卖

还有一种情况,我们解决了超卖是防止超过我们的库存量,那么会不会有一种情况是我扣减了库存,但是消息没发出,订单生成失败,导致我没有卖成功呢。我们扣减库存后,发送消息队列,这里要有重试策咯,如果发送消息失败进行重试,超过重试次数后,则要持久化磁盘,由补偿服务来进行扫描,进行后续业务处理。类似于 mysqL 的日志持久化。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~