这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
数据库锁方案
数据库锁方案是最直观的防超卖方案。库存存在数据库里,下单时用事务扣减库存,再创建订单。它的优点是正确性强,缺点是热点库存行会成为瓶颈。
本章主线
本章会依次分析:
- 悲观锁:通过行锁串行扣减库存,正确但吞吐低。
- 乐观锁:用版本号或条件更新减少锁等待。
- 性能对比:理解数据库方案在高峰下的瓶颈。
防超卖核心
最基本的扣库存 SQL 应该带条件:
数据设计要点
- 这里关注数据模型和约束关系,不需要记住具体语法。
只有更新成功,才能继续创建订单。这样可以避免库存变成负数。
数据库方案的问题
数据库方案适合低并发抢购,但在秒杀高峰会遇到:
- 同一库存行被大量请求竞争。
- 失败请求也消耗数据库连接。
- 事务持有锁时间越长,吞吐越差。
- 数据库成为全链路最脆弱的核心依赖。
因此,数据库锁方案适合作为理解正确性的起点,不适合作为大规模秒杀的最终方案。
学完本章要回答
- 悲观锁和乐观锁分别解决什么问题?
- 为什么带条件更新能防止超卖?
- 为什么数据库正确但承受不了秒杀峰值?
下一章会把库存扣减前置到 Redis,并用队列削峰。