BACK
High-Concurrency Booking · Tornado · Redis

Greenbird Badminton

面向羽毛球馆高峰预订场景的全栈运营平台,以异步 I/O、分布式锁和数据库事务控制预约冲突,并连接会员、支付、商城、赛事与后台运营。

Role全栈开发者
Focus并发预约安全
StackTornado / Vue 3 / Redis
Greenbird 羽毛球馆场地与时段预订界面

从“抢场地”出发设计完整运营系统

Greenbird 以最容易产生竞争条件的场地时段预订为核心,向外连接会员账户、余额支付、预约订单、商城库存、赛事报名、球友社区、通知和运营统计。用户侧与管理侧共享同一套业务状态,避免前台显示、资金流水和后台处理互相脱节。

前端使用 Vue 3、TypeScript、Pinia 与 Element Plus,后端采用 Tornado 异步请求模型,通过 aiomysql 连接池和异步 Redis 客户端处理网络与数据库 I/O。

Python Tornado
Vue 3
TypeScript
Pinia
MySQL 8
Redis 6
JWT
Nginx

四层保护,避免高峰期重复占用同一时段

同一场地和起止时间首先通过 Redis SET NX EX 获取带 TTL 的分布式锁;释放时执行 Lua 脚本校验锁持有者,避免一个请求误删另一个请求的锁。进入持久化阶段后,MySQL 事务通过 FOR UPDATE 锁定用户、场地、会员账户与冲突预约,再原子创建预约和待支付订单。

01 / ASYNC I/O
异步接入
Tornado 协程配合异步 MySQL 与 Redis 客户端,减少 I/O 等待造成的线程阻塞。
02 / DISTRIBUTED LOCK
快速拒绝竞争
Redis 原子加锁让同一时段只有一个请求进入核心创建流程,并通过 TTL 自动兜底。
03 / TRANSACTION
数据库最终校验
事务内复核场地状态、交叉时段、每日上限、余额和会员折扣,失败整体回滚。
04 / EXPIRATION
超时释放容量
待支付订单到期后同步标记预约失效,使占用时段重新回到可预订状态。
该架构面向高并发预约冲突设计;项目目前未提供公开压测报告,因此不展示未经验证的 QPS 或吞吐量数字。

从实时可用状态到支付、取消和退款

场地页按日期、营业时间和配置化时间粒度生成时段状态,并把 Redis 临时锁与数据库有效预约合并为可预订、锁定、已预订、不可用四类结果。选择场地和时段后,系统即时计算时长、会员折扣、应付金额及可用余额。

创建后的预约进入待支付订单,支付成功后同步扣减会员余额、记录资金流水并发送通知;取消、超时和管理员退款分别进入对应事务流程,保证预约状态、订单状态和余额变化一致。

会员账户不只是一个折扣标签

会员中心统一管理等级、有效期、余额、积分与完整流水。预约消费、取消退款、商城购买和商城退款都会写入同一账本,保留变更前后余额、积分、原因和操作人,便于用户核对和管理员审计。

平台还提供活动赛事报名、球友圈、公告和通知中心,使场馆系统同时覆盖交易、组织与社群触达,而不是停留在单一预约工具。

把会员余额延伸到场馆零售

商城支持商品搜索、购物车、余额支付、到店领取、订单查询和退款申请。下单事务按固定顺序锁定商品,复核库存后原子扣减库存、会员余额并生成订单明细,降低并发购买下的超卖和账实不一致风险。

Greenbird 羽毛球馆会员商城界面
场馆商城:商品库存、会员余额、购物车和订单入口集中在同一工作区,支持球馆用品到店领取。

把用户服务与后台运维放在同一数据闭环

管理员可以管理用户角色、会员账户、场地状态、预约与退款、商品库存、赛事、公告、通知和社区内容。统计模块按日期聚合预约状态、活跃用户、场地使用率和热门时段,健康检查同时覆盖应用、MySQL 与 Redis。

01
并发安全预约
分布式锁、事务复核和超时释放共同保护场地时段。
02
会员资金账本
余额、积分、折扣与每笔交易变更都可追踪。
03
事务化商城
库存、支付、订单、退款和通知形成一致状态流。
04
赛事与社区
支持赛事报名、球友内容、公告和站内通知。
05
运营统计
按场地、时段和用户分析预约量与使用率。
06
可配置规则
营业时间、预约粒度、每日上限和超时策略均可调整。