Menu

9.9. 随机拒绝

随机拒绝

在我们现在的实现中,每次提交秒杀下单请求至少会产生一次 Redis 查询,那有没有办法将这个查询也省掉呢?答案就是接下来我们将要学习的电商秒杀系统中另外一个大杀器:随机拒绝。

1. 原理介绍

现在各大电商的秒杀系统都会需要用户提前预约,只有预约了的用户才有资格去参与秒杀。假设 iPhone X 在天猫首发时有 10000 部库存,而预约购买的人数是 100 万,也就是预约和库存比是 100:1,一百个用户里只有一个能抢到。

既然大部分人都不可能抢到,那我们完全可以在用户提交下单请求时生成一个 0 ~ 100 的随机数,如果这个数大等于 2 则直接告诉用户抢购的人太多请重试,这样能落到 Redis 的请求就只剩下了 2% 也就是 2 万人。

而生成随机数这个操作完全不涉及到其他服务,可以通过扩展 Web 服务器来线性地提高吞吐量,这就实现了用很低的成本消减掉 98% 的压力。

2. 使用中间件实现

接下来我们就要实现随机拒绝这个功能,基于我们目前的实现,代码进入到控制器时就已经完成了 Redis 查询,因此我们需要在进入控制器之前就完成随机拒绝这个行为,在 Laravel 中可以用中间件来实现。

现在先创建一个中...

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

为了保证课程的高品质,我们需要对课程进行收费。付费后 才能观看剩余内容。 购买

上一篇 下一篇
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 7

xiaoxianlg
10 万的秒杀,需要 250 台机器?
0 个点赞 | 8 个回复 | 问答 | 课程版本 5.5
sunrain
250 台服务器能用 deployer 完成部署吗?
0 个点赞 | 3 个回复 | 问答 | 课程版本 5.5
18874127314
老师,有个疑问
0 个点赞 | 2 个回复 | 问答 | 课程版本 5.7
__中国人
老师,load 和 with 到底有何区别
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
JHWu
秒杀下单疑问
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.7
finley
关于秒杀活动和服务器配置的问题
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.5
一个菜鸟
随机拒绝~让我有种悠悠伤痛。我再也不相信秒杀了。
0 个点赞 | 0 个回复 | 分享 | 课程版本 5.7
刻意练习,每日精进。
2
点赞
1124
浏览
7
讨论

作者
leo