程序聚合 软件案例 高并发在线票务抢票系统

高并发在线票务抢票系统

2026-10-21 20:30:24
行业:电商
载体:网站
技术:Java、JUnit、MyBatis、Spring Boot

业务和功能介绍

1、立项背景与目标:面向限量票务秒杀场景,活动开始瞬间大量用户同时抢票,直接写数据库会造成行锁竞争和连接池打满,同时容易出现超卖、掉单(库存已扣但订单未生成)和重复下单。项目目标是让抢票热路径不访问 MySQL,通过 Redis 原子扣减保证不超卖,通过异步落库削峰,并用幂等和唯一索引保证不重复下单。

2、功能与核心模块:活动侧支持库存预热(默认只在 key 不存在时初始化,避免售卖中重置库存)和活动详情缓存预热;用户侧提供幂等 Token 获取、抢票、活动详情查询和订单列表查询。后台模块包括 Outbox 消息投递、订单异步落库、失败重试与死信落库、Redis 与数据库库存定时对账。

3、业务流程:用户先调用 token 接口获取一次性幂等 Token(60 秒有效),再携带 Token 调用抢票接口。请求依次经过滑动窗口限流、参数校验、Token 原子校验与删除,然后执行一次 Redis Lua 脚本,在脚本内完成活动状态与售卖时间窗口校验、库存判断与扣减、待发消息写入 Redis 发件箱,返回剩余库存后立即向用户返回抢票成功。随后由后台投递线程把消息发往 RabbitMQ,消费者在事务中写入订单和扣减记录并回写数据库库存,用户可通过订单接口查询最终结果。

项目实现

1、整体架构与技术栈:采用 Spring Boot 3.2 + MyBatis-Plus + Redis 7 + RabbitMQ + MySQL 5.7 的单体分层架构,核心思路是“同步链路极短、异步兜底”。Redis 承载库存计数、活动元信息、幂等 Token、限流窗口和 Outbox 发件箱;RabbitMQ 负责削峰与异步落库;MyBatis-Plus 负责订单、扣减记录和活动表持久化;Redisson 仅用于低频的缓存重建加锁。

2、负责模块与结果:独立完成抢票主流程、Outbox 投递、消费端重试与死信处理、幂等、缓存组件和限流模块。量化结果:本机 200 并发 1.99 秒完成、0 失败;活动总库存 300、售出 201,Redis 剩余 99 与数据库 remain_stock 99 一致;订单数、唯一 batch_no 数、扣减记录数均为 201;同一条消息并发投递 6 次只落库 1 条;毒消息重试 3 次(间隔 5 秒)后进入死信并落库,队列无空转。

3、难点与解决方案:
(1)超卖:把“读库存、比较、扣减”拆开写会有网络往返窗口,并发请求都读到旧值。改为放进同一个 Lua 脚本,利用 Redis 单线程执行脚本的原子性消除窗口,并把活动状态与时间窗口校验也下沉到脚本,热路径不查库。
(2)掉单:扣库存和发消息分属两个系统,中间崩溃会出现“扣了库存但消息没发”。把待发消息与扣减放在同一个脚本里写入 Redis List;投递线程用 RPOPLPUSH 原子搬到 processing,Publisher Confirm 确认后才删除,空闲时回收崩溃残留。
(3)重试不生效:basicNack(requeue=true) 不会写 x-death,基于它的重试上限永远不触发,消息回队首还会造成空转。改为确认原消息后投递到 5 秒 TTL 延迟队列,用自定义消息头累计次数,超过 3 次转死信并落库 ticket_order_fail。
(4)重复落库:消息是 at-least-once,先查再插在并发下拦不住。订单表 batch_no 建唯一索引兜底,并把落库事务隔离级别降到 READ_COMMITTED,避免 RR 快照看不到刚提交的订单、把幂等命中误判成订单冲突。

示例图片视频


hzp
24小时内活跃
方向: 后端-Java、爬虫/脚本-爬虫/脚本、
交付率:100.00%
相似推荐
家庭环境监测与照片管理系统
集成家庭环境监测与照片管理功能。基于 ESP32 接入环境传感器,定时采集环境数据,传输至后端服务,实现环境数据实时展示、历史数据查询及设备管理。同时提供照 片上传、按日期分类浏览、缩略图展示及外接存储设备管理功能
节能平台
1.系统设置 用户账号、角色、权限(菜单/操作级)管理,行政区划维护,基础档案信息维护,登录验证码、操作日志、登录日志。 2.基站业务 策略下发、设备管理、下发指令、告警管理等、数据采集、文件传输、AI策略、策略统计、节能成效统计。 3.后面模块为横向扩展业务
电子秤-电子秤
1 想要自己制作一个克重秤 2 模拟了一个电子秤包含:12个按键,重量传感器,lcd屏幕显示,可计算价格,有去皮的功能,和使用pwm控制的警示音效。使用stm32f405芯片核心板,外搭载3*4的矩阵键盘。 3 最后做了一个简易版本,并没有做商业
独居老人智能监护
业务和功能介绍 一、立项背景和目标 面向独居老人居家安全监护需求,本项目建设“守望·独居老人智能监护”系统,由 ESP32-S3 边缘采集终端与局域网上位机协同工作。目标是实时掌握老人生命体征与居家环境风险,支持语音控制家电与降噪,并在跌倒、气体异常、火焰、心率偏离及到点吃药等场景及时告警提醒,降低家属与社区护理人员的巡查压力,提升独居场景下的响应时效与照护质量。 二、软件功能与核心模块 健康监测:MAX30102 红外接触式心率检测,手指在位后输出 BPM,异常可持续告警。 环境安全:GY-SHT31 温湿度、TVOC-301 气体(CO₂/VOC/甲醛)、火焰传感器联动监测。 跌倒预警:MPU6500 加速度识别“失重—冲击”过程,触发板端蜂鸣与网页横幅。 语音与家电:板载麦克风采集,上位机离线语音识别,支持打开/关闭空调、开灯/关灯、打开/关闭降噪。 吃药提醒:可配置每日多时段提醒,到点蜂鸣;说“吃药了”或网页确认后关闭。 AI 研判与报告:可选接入 DeepSeek,生成实时建议及日报/周报,供家属查阅。 上位机看板:局域网 Web 页面展示设备在线状态、遥测曲线、告警时间线与控制按钮;支持打包为免安装 exe 分发。 三、业务流程与功能路径 板端上电接入 2.4G WiFi,按配置连接上位机 IP;传感器周期采样,经 UDP 上报遥测,命令经 UDP 下发。语音口令由板端截取音频上传上位机识别后回传指令,控制继电器与降噪开关;跌倒、火焰、气体、心率等告警在本地蜂鸣的同时推送网页;吃药提醒由上位机按时刻触发并驱动蜂鸣,确认后停止。家属通过浏览器查看总览、环境、跌倒、语音家电、告警中心与 AI 报告,形成“感知—告警—处置—复盘”的完整监护路径。
ESP32智能车位监测与4G图像采集终端
面向车位占用监测和现场图像采集场景,开发基于ESP32-S3的物联网终端固件,将传感器触发、激光测距、拍照与4G上传串联为设备工作流程。 设备被触发后读取距离信息,结合前后距离变化及占用状态判断是否发生车位变化;对符合条件的事件采集并上传照片,对小幅波动和部分误触发进行过滤。任务完成后进入休眠,并支持后续唤醒,兼顾事件采集与设备功耗管理。 该项目覆盖传感器、摄像头、蜂窝通信与嵌入式任务协同,适合展示智能硬件固件开发、现有设备功能扩展及物联网终端联调能力。
帮助文档   Copyright @ 2021-2024 程聚宝 | 浙ICP备2021014372号
人工客服