秒杀系统要解决的问题:
1、防止超卖
2、防止同一用户多次下单
2、提高qps

秒杀基本步骤:
1、判断商品是否不足
2、判断同一用户多次下单
3、更新库存
4、生成订单

防止超卖

1、更新库存的sql 加上判断库存大于0的where

防止同一用户多次下单

1、秒杀订单加上 (商品,用户)的唯一索引

提高qps

1、页面静态化,后端只返回必要的数据,而不是整个页面。前后端分离就达到了页面静态化的效果。减少后端的数据传输量,提高响应速度。
2、预先将秒杀商品的库存放入redis,用户下单在redis中预减库存,这比从数据库中读取库存要快得多。加速库存不足的判断。
3、用户下单成功后,将(用户,商品)存入redis。加速同一用户多次下单的判断
4、单机内存标记。每个机子有个 商品id映射到库存是否不足的map,减少访问redis来判断库存是否不足。必要的话可以每个机子有个 (用户+商品)映射到是否已购买的map,减少访问redis来判断用户是否多次下单。
4、redis预减库存后,生产消息放入消息队列,立即返回。利用消息中间件将更新库存、下订单的操作脱离出去,变为异步执行。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐