持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
Redis 热点库存问题
库存问题其实主要是热点扣库存,比如春节红包雨活动,同一个资金池数亿人抢红包, 此时的能达到 150wQPS。
因此存在如下问题:
- 库存key过多问题, 假设有100w sku,要为每个 sku 设置库存么?
- 高并发下的单表,或者单 redis key 性能问题?
一般来说,先缓存扣减,扣减成功后,异步写入一条库存流水记录,后续再做缓存与数据库库存总量同步。
方案1 -分桶扣减库存
因为存在热点,那么是否可以考虑分片,将一个 Sku 库存分到不同的桶中,将库存均匀的分散到 N 个 redis 桶中
缺点:
不同桶之间,库存消耗不均衡,可能导致部分用户无法扣减库存的问题,但是其他桶中还是有库存的,这个就会导致可诉。
方案2:
方案2其实是在方案1上的优化,通过小量多次派发库存,使用定时任务监听各桶内库存,低于阈值则派发库存。这样做到了rebalance, 用户请求,hash 到不同的redis 桶进行库存扣减。
对于这个秒杀场景,一般使用分时间段,不一次性派发所有库存,分时间段开始活动,也就分阶段扣库存。