Skip to content

秒杀系统

本章节介绍高并发秒杀系统的设计思路与关键实现。

核心挑战

  • 瞬间高并发流量(QPS 百万级)
  • 库存超卖问题
  • 数据一致性保障
  • 接口防刷与安全

整体架构

用户请求 → CDN/网关限流 → 消息队列削峰 → 异步扣减库存 → 结果回调

关键技术点

环节技术方案
限流Nginx + Sentinel 多级限流
缓存Redis 预热库存,原子操作扣减
削峰Kafka/RabbitMQ 异步处理订单
防超卖Lua 脚本原子操作 / 数据库乐观锁
防刷验证码 + 黑名单 + 接口加密

库存扣减方案

java
// Redis Lua 脚本原子扣减库存
String lua = "local stock = tonumber(redis.call('get', KEYS[1])) " +
             "if stock <= 0 then return -1 end " +
             "redis.call('decr', KEYS[1]) " +
             "return stock - 1";

常见问题

Q: 如何防止超卖? 使用 Redis Lua 脚本保证原子性,同时数据库层加乐观锁兜底。

Q: 如何保证消息不丢失? 消息队列开启持久化,消费端手动 ACK,失败重试 + 死信队列。

基于 VitePress 构建