一文读懂:高并发场景避免超卖少卖的实战攻略
在票务这行库存就是命脉。“超卖”Over-selling让你赔钱丢名声“少卖”Under-selling让老板觉得你技术不行票明明有却卖不出去。今天飞哥就结合这几年在票务系统摸爬滚打的经验跟大家好好唠唠这里面的深水区。1. 为什么“超卖”和“少卖”是系统的生死劫很多兄弟初学并发觉得写个synchronized或是ReentrantLock就能高枕无忧了。但在分布式架构下这就像是用塑料袋去兜洪水。超卖就像 10 个人同时挤进一个窄门大家看到货架上还有最后一张票结果 10 个人都下单成功了。少卖又叫“库存空转”。用户抢了票占了座结果不付钱。你把票锁死了别人买不到最后演出开始了座位还空着白白浪费钱。2. 三个段位的防御战从行锁到 Lua 脚本咱们票务系统处理库存通常会经历三个阶段。我做了个对比表大家对号入座方案技术手段优点缺点适用场景青铜DB 行锁 (UPDATE...WHERE stock 0)绝对一致简单粗暴并发一高数据库直接宕机内部员工购票、小场次白银分布式锁 (Redisson)逻辑清晰保护 DB锁竞争剧烈响应时间长中等流量促销黄金Redis Lua 脚本原子操作极高性能逻辑略复杂需考虑一致性大促、万人抢票首选3. 看家本领Redis Lua 丝滑扣减在抢票这种瞬时爆发场景我们通常把库存预热到 Redis 里。为什么一定要用 Lua因为 Redis 执行 Lua 脚本是原子性的。它能保证“查询库存 - 判断余量 - 扣减库存”这三步像德芙一样丝滑中间不会被任何请求插队。Java 核心逻辑参考// Lua 脚本原子扣减 String luaScript local stock tonumber(redis.call(get, KEYS[1])) if (stock 0) then redis.call(decr, KEYS[1]) return 1 // 扣减成功 else return 0 // 库存不足 end; // 执行扣减 Long result redisTemplate.execute( new DefaultRedisScript(luaScript, Long.class), Collections.singletonList(show_101_stock) ); if (result 1) { // 抢到预扣名额赶紧去异步创建订单 sendOrderMessage(userId, showId); } else { throw new BusinessException(票已售罄下次早点来); }4. 别让“占座不买票”拖垮你延时回滚策略超卖防住了那“少卖”怎么办票务系统最怕用户抢了票不付钱。我们的标准打法是“预扣库存 延迟检查”。请看这张流程图用户Redis库存延时队列数据库等待用户支付...alt[未支付][已支付]1. 抢票 (Lua 原子扣减)扣减成功2. 生成待支付订单3. 发送 15 分钟延迟消息4. 检查支付状态5. 回滚库存 (Incr)6. 取消订单7. 更新为支付成功用户Redis库存延时队列数据库敲黑板回滚库存时一定要注意幂等性。别因为网络抖动回滚了两次那库存就凭空变多了成了“灵异事件”。5. 飞哥的血泪复盘缓存和 DB 的“信任游戏”记得刚入行那会儿我有次只做了 Redis 扣减没做后台对账。结果 Redis 意外宕机重启后虽然有持久化但还是丢了几个计数。那天晚上DB 里的订单票数和 Redis 里的库存数对不上差了十几张。别小看这十几张票那是几十通投诉电话和客服小姐姐的眼泪。反思缓存只是冲锋队的盾牌数据库才是最后的防线。现在我们的系统都会跑一个异步对账程序每隔几分钟对一次账。如果发现 Redis 里的数和 DB 差异过大立马报警并人工介入。

相关新闻

金融终端如何用CKEditor插件实现Excel动态公式Word渲染?

金融终端如何用CKEditor插件实现Excel动态公式Word渲染?

企业网站后台管理系统Word/微信公众号内容导入功能解决方案 需求背景 作为广西某国企的项目负责人,我们面临在企业网站后台管理系统中增强内容编辑功能的需求。具体需求包括: Word粘贴功能:从Word复制内容可直接粘贴到编辑器,图…

2026/7/3 19:43:54 阅读更多 →
前端网页转存Excel数据时如何保持原有格式?

前端网页转存Excel数据时如何保持原有格式?

作为福建软工大三狗的CMS升级求生指南 各位码友好啊!本人福建某高校软件工程大三狗一枚,最近在折腾CMS新闻管理系统升级,想搞个Word一键转存黑科技,结果发现这坑比想象中深多了… 当前技术栈现状 前端框架:Vue2 CLI…

2026/7/5 18:32:46 阅读更多 →
2026冲刺用!8个一键生成论文工具:本科生毕业论文+开题报告高效写作测评

2026冲刺用!8个一键生成论文工具:本科生毕业论文+开题报告高效写作测评

在2026年,随着高校毕业论文写作需求的持续增长,越来越多本科生开始关注如何高效完成开题报告与论文撰写。面对繁重的学术任务和时间压力,传统写作方式已难以满足快速出稿的需求。为此,笔者基于真实使用场景与用户反馈,…

2026/7/3 5:01:51 阅读更多 →

最新新闻

对字符串排序的影响

对字符串排序的影响

字符串的大小比较并不是如C那样按照字符串字符内码大小顺序从头到尾来比较的。由于我是从C/C转过来的,我一直以来都以为.net 下字符串的比较规则和C是一样的,直到有一天我的程序在英文操作系统下出错。 .net 下,字符串的排序受 System.Threa…

2026/7/5 18:29:28 阅读更多 →
Runno高级调试技巧:解决复杂代码执行问题的完整方法

Runno高级调试技巧:解决复杂代码执行问题的完整方法

Runno高级调试技巧:解决复杂代码执行问题的完整方法 【免费下载链接】runno Sandboxed runtime for programming languages and WASI binaries. Works in the browser, on your server, or via MCP. 项目地址: https://gitcode.com/gh_mirrors/ru/runno Runn…

2026/7/5 18:29:28 阅读更多 →
Instatic集群部署:负载均衡与会话共享配置指南

Instatic集群部署:负载均衡与会话共享配置指南

Instatic集群部署:负载均衡与会话共享配置指南 【免费下载链接】Instatic Instatic is a modern self-hosted visual CMS - get it running in 1 minute 项目地址: https://gitcode.com/GitHub_Trending/in/Instatic Instatic作为一款现代自托管视觉CMS&…

2026/7/5 18:25:26 阅读更多 →
CANN/asc-devkit:int8转half数据类型转换API

CANN/asc-devkit:int8转half数据类型转换API

asc_int82half 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.…

2026/7/5 18:25:26 阅读更多 →
CANN社区任务-SpSM算子开发

CANN社区任务-SpSM算子开发

7月社区任务-SpSM算子开发任务书 【免费下载链接】cann-ops-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-ops-competitions 基础信息 技术标签:算子开…

2026/7/5 18:21:25 阅读更多 →
Subliminal:终极iOS集成测试框架完整指南

Subliminal:终极iOS集成测试框架完整指南

Subliminal:终极iOS集成测试框架完整指南 【免费下载链接】Subliminal An understated approach to iOS integration testing. 项目地址: https://gitcode.com/gh_mirrors/subl/Subliminal Subliminal是一款专为iOS应用开发打造的集成测试框架,它…

2026/7/5 18:21:25 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻