库存扣减方案"/>
高并发场景的库存扣减方案
方案一:Redis扣减库存&job回写发放库存到DB
流程图
- 库存扣减流程图
- 库存同步job流程图
优点
- 简单易实现
- 能支撑一定并发量
缺点
- Redis宕机,存在库存丢失,可能导致库存超发
- 高并发场景下,如某个商品大量售卖时,易产生库存key热点数据,不能横向扩展
- 库存扣减失败,进行库存回滚操作,如果在库存回滚前读取了Redis的发放库存,那么会导致读取到的库存值大于实际发放库存,产生假超发问题
方案二:Redis批量预扣减库存
流程图
- 库存扣减流程图
优点
- Redis数据丢失时,损失部分库存,但不会导致超发
- 缓解频繁回写DB已发放库存问题
缺点
- 当redis预扣减库存数据丢失时,已发放数量的统计>实际已发放数量,损失部分库存
- 预扣减库存key只有一个,高并发场景下扣减库存,容易造成Redis key热点问题。
方案三:Redis分片批量预扣减库存
流程图
- 库存扣减流程图
优点
- 解决了Redis 热点key问题
- 支持横向扩展,支持高并发场景的性能问题
- Redis数据丢失时,损失部分库存,但不会导致超发
缺点
- Redis数据丢失时,损失部分库存
- 某用户扣减库存时,被路由到其中一个分片,该分片没有库存,但其他分片有库存时,该用户也会扣减库存失败。因此该方案适用于:库存数量较大、并发量高、不能超发的场景
更多推荐
高并发场景的库存扣减方案
发布评论