7.如何实现一个秒杀系统,保证只有几位用户能买到某件商品


设计这个系统是一个考虑全面的问题,可以发散出很多问题,考察很多方面,不是仅仅回答通过redis的自减操作完成

比如简单的方案:

1,页面开启倒计时,要保证不能把下单接口暴露过早暴露出来,防止机器刷下单接口

2,前端限流,比如nginx对下单接口限流,命中限流则返回302到秒杀页

3,后端单独部署,独立域名和nginx,与线上正常运行的系统隔离开来,避免影响到线上环境

4,由于生成订单操作比较耗时,采用队列的方式来解耦下单成功和生成订单,针对进入后端的请求,采用redis自减,针对自减结果>0的请求则认为下单成功,触发一个生成订单的消息,然后立即返回给用户结果

5,用户方面,针对秒杀成功有两种处理方式

  a,用户端收到秒杀成功的结果,则开启提示页面,并进入倒计时,倒计时时间为订单生成的预估时间

  b,秒杀成功后,给当前用户在redis中生成一个订单生成状态的标识,用户端开启提示页面,loading,并轮询后端订单生成状态,生成成功之后让前端跳转到订单页面

6,订单服务订阅下单系统发送的消息,并开始生成订单,生成订单成功之后更新redis中用户秒杀订单的状态为已生成订单

 

系统应该有页面和接口

页面用于展示用户界面,接口用于获取数据

界面:秒杀页面,秒杀成功页面,秒杀失败页面,命中限流页面(查看订单页面不算秒杀系统的功能)

接口:秒杀下单接口,秒杀成功获取订单生成状态接口


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM