第二期 · 技术实战复盘

报名通道开启瞬间

5000 个名额如何做到「不超卖、不丢失、不卡顿」?
用生活化的比喻,拆解报名系统背后的数据一致性保障。

技术普惠篇 2026 · 北京 报名系统 · Redis
01 · 开篇

如果你是一位会议负责人,报名通道开启前的那个晚上,你一定睡不踏实。

5000 个名额,可能 10000 人甚至更多人同时来抢。你盯着倒计时,心里反复盘算着几个问题:系统能扛住吗?会不会有人报上了名,最后名单里却没有他?万一超卖了,多出来的人怎么安排?我怎么跟领导交代?

这篇文章不堆砌技术术语,只用你熟悉的场景,讲清楚一件事:
报名系统是怎么做到「一个不多、一个不少」的。
02 · 报名就是管好一个“黑板上的数字”

先忘掉技术:想象你在管理一个人工报名处

你负责一场会议,会场里有 5000 个座位。报名当天,你安排了 10 个工作人员同时接待来报名的人。

问题来了:10 个人怎么知道同一个座位没有被重复卖出去?如果有人同时在两个窗口交钱怎么办?你怎么保证 5000 个座位,不多不少刚刚好?

你准备了一块小黑板,上面写着“剩余座位:5000”。谁卖出一张票,必须立刻跑到黑板前,把数字减 1。任何人都可以在买票之前先看一眼黑板,确认还有没有位置。

但实际操作中,这块小黑板会出问题: 两个人同时看到“剩余 1 个”,同时跑去卖票,结果超卖;或者付了钱但忘了改黑板,记录丢了。

报名系统要解决的,就是一模一样的问题。那台“小黑板”,就是整个系统的核心。

人工报名处工作流程
03 · 超级记账员

谁来看管这块小黑板?一个不会算错账的记账员

你需要一个什么样的人来看管这块小黑板?

速度极快 — 每个人卖完票都要找他更新,他不能成为瓶颈
记性极好 — 5000 个名额的变化,他脑子里清清楚楚
绝不走神 — 一次只处理一个人的请求,处理完再处理下一个
不怕忙 — 所有人同时围过来,他依然不慌不忙
这个人在技术世界里有一个名字:Redis。
你可以把 Redis 理解成一个被训练到极致的“名额记账员”。他的全部工作就是守住那个名额数字,确保每一次变化都准确无误。
04 · 食堂打饭的智慧

为什么一个人比一群人更快?用食堂打饭来理解

想象一下食堂打饭。只有一个窗口,阿姨一次只服务一个人。你前面的人点完餐、付完钱、端走饭菜,才轮到你。阿姨绝不会同时应付两个人,因为那样她会记混。

看起来一次只服务一个人很慢,对吧?但有意思的是,如果阿姨同时服务两个人,她反而会因为反复确认而更慢,而且最容易出错。

Redis 就是这样工作的
  • 单线程:一次只处理一个请求,处理完再接下一个
  • 不被打断:处理过程中绝对不会被插队
  • 结果:速度快 + 不出错

你可能会问:多找几个记账员不是更快吗?答案是:在“修改同一个数字”这件事上,一个人反而比一群人更快。因为多个人同时改一个数字,需要互相商量、对齐信息——商量的时间比干活的时间还长。

那 Redis 为什么能快到毫秒级?

就算一次只处理一个请求,它凭什么那么快?这里有一个更底层的秘密。

你平时用电脑,数据主要存放在两个地方:硬盘内存

  • 硬盘 就像家里的一个大书柜,容量很大,什么都能放。但想从里面找一份文件,得走过去、打开柜门、翻找、拿出来——这个过程很慢
  • 内存 就像手边的一张书桌,正在用的东西就放在桌上,伸手就能拿到——速度是硬盘的几十倍甚至上百倍

绝大部分软件(包括我们前面提到的 MySQL 数据库)把数据存在硬盘上。每次读写都要经历“走到书柜前、翻找、打开、读完再放回去”这一整套动作。

Redis 不走这条路。它把所有数据放在内存里,全部在书桌上完成操作,从来不翻书柜。

你可能想:那如果有人报名成功了,数据不存到书柜(硬盘)里,万一断电了怎么办?好问题。Redis 的解决方式是:先记账,后存盘

报名那一刻,Redis 在书桌上(内存里)瞬间完成扣减,立刻告诉你“成功了”。然后它不慌不忙,在后台慢慢把记录抄到书柜里(同步到硬盘)。用户先拿到结果,数据后入库——既保证了速度,又保证了安全。

所以 Redis 快就快在两点:
第一,它所有的活都在书桌上干(内存读写),从来不用跑书柜(无磁盘 IO)。
第二,它一次只接一单(单线程),从不需要停下来跟别人对账(无锁竞争)。

你问一个人“你妈妈的手机号是多少”,他能立刻告诉你,因为号码就在他脑子里(内存)。但如果他需要翻通讯录(硬盘),哪怕只翻一秒钟,你也觉得慢了。Redis 就是那个把一切号码都记在脑子里的人。

05 · 核心步骤

报名那几秒钟,系统里发生了什么

报名开启前,系统已经把“5000”这个数字放进了 Redis 的“脑子”里——相当于你在黑板上提前写好了“剩余名额:5000”。

第一步:防重复检查

每个人报名时,Redis 会先查一个“签到表”:这个人之前报过名吗?如果报过了,直接拦住;如果没报过,进入下一步。这一步防止了同一个人用同一部手机连续点两次,把别人的名额占走。

第二步:原子扣减(最关键的环节)

Redis 连续做了三件事,中间绝不被打断:

  1. 看了一眼黑板 —— 确认还有名额
  2. 把数字减掉 1 —— 名额扣减
  3. 在签到表上写下 —— 这个人已报名

这三件事“打包”成一个整体,要么全部完成,要么全部不做。这就是“原子操作”。

如果只看名额但不记录是谁 → 两个人同时看到还剩 1 个 → 超卖;如果改了数字却没记录是谁 → 用户付了钱但系统查不到 → 投诉。所以这三步必须同时完成。

Redis 原子扣减三步流程

第三步:异步落库(你先拿票,后台慢慢入账)

报名成功后,用户立刻看到“报名成功”的提示,但此时数据可能还没写进正式数据库。为什么?因为数据库写账本比较慢,如果每次都等它写完,用户就得排队转圈圈。

做法: Redis 先把账记在脑子里,立刻告诉用户“你成功了”。后台程序再慢慢把数据写进正式的总账本。
这就像你下完单,收银员先让你把东西拿走,晚上关门后再统一记账——你不需要站在柜台前等他写完账再走
报名系统整体数据流

报名系统完整链路

把上面所有步骤串起来,一次报名请求的完整路径是:

用户提交报名 → 请求到达服务器 → 防重复检查(Redis) →
原子扣减(Redis:查名额 → 减 1 → 写记录) → 实时返回结果 →
异步写入数据库(MySQL) → 数据可查 / 可导出
报名系统完整链路
06 · 方案对比

为什么 Redis 的方式更可靠?

我们用三种情况来对比,你会看得更明白。

方案比喻结果
普通数据库 (MySQL) 一个收银台,所有人排队结账,准确但慢 上千人同时排队 → 系统卡死 → 报不上
多个记账员(分布式锁) 10 个人记账,需要互相确认信息 对齐信息耗费时间,反而更慢
Redis(一个超级记账员) 一个顶尖记账员,速度极快,从不出错 又快又准
MySQL 像图书馆的借书登记本, 记得很详细,但翻找和填写都需要时间。
Redis 像大脑里的即时记忆, 瞬间反应,但只记最重要的信息——剩余名额。
MySQL(排队长龙)vs 分布式锁(多人协商)vs Redis(单人快速处理)- 三种方案对比
07 · 应急预案

万一 Redis 出问题了呢?主办方最关心的问题

任何技术系统都不可能 100% 不出问题。我们做了三手准备:

第一手:自动切换
主记账员(主 Redis)突然不能工作,系统会在几秒内自动切换到备用记账员(备用 Redis)。用户完全感觉不到。
第二手:每日对账
系统每天自动核对一次“报名记录”和“名额数量”,发现不一致立刻报警,人工介入。
第三手:人工恢复
极端情况下数据丢失,有完整的数据库备份,运营人员可在 10 分钟内恢复全部数据。
我们花最多时间思考的,不是“系统怎么跑起来”,
而是“万一系统出问题,怎么让主办方和用户都不受影响”。
主备切换 → 每日对账 → 人工恢复 - 三层保障机制
08 · 真实表现与总结

这些设计,在真实会议中表现如何?

5000
名额数
5s
全部抢完的时间
0
超卖数
0
漏记数
1.2s
平均确认通知时间
5min
报名结束到导出完整名单
运营人员真实反馈

“以前每次报名我都盯着后台,怕系统出问题、怕用户投诉。这次我几乎没怎么管,系统自己跑完了。”

对主办方来说,这意味着什么?

放心让用户抢 — 名额不会超,记录不会丢
放心统计数据 — 剩余名额实时准确,不用人工核对
放心交付成果 — 报名结束后马上拿到干净、完整的名单
报名系统把“不确定性”变成了“确定性”。
你只管发布报名通知,剩下的,系统替你办好。

说到底,报名系统的本质就是管好一个不断减少的数字。
管好了,用户满意、主办方省心。我们选择用最可靠的方式管好它。

09 · 技术实力展示

从生活比喻到技术实现

前面我们用黑板、记账员、食堂打饭这些生活场景讲清楚了报名系统的设计逻辑。下面是这套逻辑在技术世界里的真实面貌——

小黑板 · 记录剩余名额 Redis String
签到表 · 防止重复报名 Redis Set
三步打包 · 查名额 + 扣减 + 写记录 Lua 脚本 · 原子操作
先拿票后入账 · 用户快速拿到结果 异步落库 · 消息队列
书桌上干活 · 从不翻书柜 内存读写 · 无磁盘 IO
一次只接一单 · 不需要跟别人对账 单线程 · 无锁竞争
报名系统技术架构流程图
这套方案的真实表现
  • 吞吐量:单机 Redis 可支撑数万 QPS,轻松应对万人同时抢报
  • 一致性:Lua 脚本保证原子性,从源头杜绝超卖
  • 可用性:主备切换 + 每日对账,数据不丢不错
  • 扩展性:支持水平扩容,可平滑扩展至数万人并发
  • 可靠性:历经多次千人级真实会议检验,0 超卖、0 漏记

技术普惠 ≠ 技术简陋。我们用最可靠的方式,解决最复杂的问题。

下期预告

第三期 · 为什么你的报名页面打开速度总是比别人快?
从缓存说起,聊聊页面加载速度背后的那些事儿。敬请期待。

《技术实践》第二期 · 报名系统的数据一致性之战
基于真实会议场景 · 技术服务于体验

基本信息

其他信息

提交成功!

感谢您的申请,我们的服务人员稍后会联系您,请保持手机畅通。

微信客服支持

手机使用微信扫描二维码添加客服
获取专业服务与支持

点击按钮直接打开微信开始与客服人员沟通

服务时间: 9:00 - 22:00