电商库存系统设计案例详解(上)
1 库存扣减
多人同时买一件商品时(假设库存充足),每个人几乎同时下单成功,给人一种并行感觉。但真实情况, 库存只是一个数值,无论是存在mysql数据库还是redis缓存,减值时都要控制顺序,只能串行来扣减,当然为保证安全性,会设计一些锁控制。
1.1 关键技术点
• 同一个SKU,库存数量是共享
• 剩余库存要大于等于本次扣减的数量,否则超卖
• 对同一个数量多用户并发扣减时,要注意并发安全,保证数据的一致性
• 类似于秒杀这样高QPS的扣减场景,要保证性能与高可用
• 对于购物车下单场景,多个商品库存批量扣减,要保证事务
• 如果有 交易退款 ,保证库存扣减可返还
•
• 返还的数据总量不能大于扣减的总量
• 返还要保证幂等
• 可以分多次返还
1.2 数据库扣减
主要依赖数据库特性,保证扣减的一致性,逻辑简单,开发部署成本低。
1.2.1 依赖的数据库特性
• 依赖数据库的乐观锁(如版本号或者库存数量)保证数据并发扣减的强一致性
• 事务,针对购物车下单批量扣减时,部分扣减失败,数据