请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

秒杀优化的时候,预减库存的时候,老师能不能梳理一下预减库存思路

这里 需要注意的一点是    允许卖不完   不允许卖超

正在回答

1回答

首先,秒杀的瓶颈在于db,db扛不住几万甚至几十万的并发的。

然后,秒杀开始的时候,如果有几十万的用户并发访问网站怎么办?如果这些请求直接透传到后面的db中,毫无疑问db就会宕机了。那么我们就要想办法,不让这么多的请求去访问db。在秒杀的场景里面,每一种商品的数量是有限的,比如是10个,也就是说,最多只有10个用户会秒杀成功,剩下的几十万的用户是肯定秒杀不到的,那么这几十万的用户实际上是不需要去访问db的。预减库存就是为了只让少部分用户的请求去访问db,大部分用户的请求直接失败就不用去访问db了。

1 回复 有任何疑惑可以回复我~
  • 提问者 LxqYouCan #1
    预减库存   :
      比方说我们的库存有10个,db里存10个,系统初始化的时候,把商品加入redis,
    1.进来的用户是先访问redis    ,redis里有跟db一样的库存,redis都没有了,后面的全都返回失败,允许卖不完,不允许卖超;
    2.肯定有10个用户秒杀到对吧   ,他们先是查redis,有的话,redis库存减一,接下来的操作是,redis减完库存,判断db里还有库存的话,
    我们不是直接请求数据库,这里做一个异步下单,把请求全都放到mq中去,返回排队中。
    3.用户进行轮询是否生成订单成功,如果失败继续轮询,成功的话就异步请求出队,来进行正常的(减库存,生成订单和秒杀订单)。
    
    
    对吗,老师?
    回复 有任何疑惑可以回复我~ 2018-07-04 13:23:34
  • 若鱼1919 回复 提问者 LxqYouCan #2
    客户的请求入队以后,返回的是排队中的状态,然后客户端会不停的轮询是否下单成功。服务端队列异步请求出队,然后去真正的扣减库存,生成订单,生成了订单以后,客户端再来轮询就知道自己是成功了。
    回复 有任何疑惑可以回复我~ 2018-07-04 14:22:52
  • 提问者 LxqYouCan #3
    谢谢老师的解惑
    回复 有任何疑惑可以回复我~ 2018-07-04 14:23:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信