
1) 【一句话结论】当时通过“分布式锁+库存预占”方案解决大促超卖问题,后续优化升级为多级缓存+智能锁,提升并发性能并降低锁竞争。
2) 【原理/概念讲解】超卖本质是并发场景下库存未同步导致重复扣减。技术方案核心是“先锁定库存再扣减”,比如分布式锁保证同一时间只有一个请求处理库存,或预占库存(临时表记录预占信息,大促后统一结算)。分布式锁需注意过期时间(避免死锁)、重入问题(如Redis的SETNX+EXPIRE);缓存一致性需保证写时同步(数据库+缓存),读时优先从缓存获取(减少数据库压力)。
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 悲观锁(分布式锁) | 通过锁机制保证互斥访问库存 | 互斥性强,能直接防止超卖 | 高并发、库存稀缺场景(如大促) | 需处理锁过期、死锁问题 |
| 乐观锁(版本号) | 通过版本号校验更新 | 读多写少,冲突时重试 | 库存更新频率低、读多场景 | 冲突率高时性能差 |
4) 【示例】(伪代码)
用户下单请求:
5) 【面试口播版答案】当时遇到大促超卖,核心方案是“先锁定库存再扣减”。具体来说,我们用了Redis分布式锁,每个订单请求先尝试获取锁,锁成功后检查库存,库存够就扣减并释放锁,不够就返回错误。后续优化是升级锁为带超时重试的分布式锁,并引入多级缓存(Redis+数据库),减少锁竞争,同时优化库存校验逻辑,比如增加库存预占队列,避免瞬间高并发导致超卖。
6) 【追问清单】
7) 【常见坑/雷区】