如何设计一个秒杀系统?,小红书安卓面试题目

本文探讨了秒杀系统的设计,包括如何处理库存,防止超卖,选择合适的扣库存时机,以及应用分布式限流和异步化策略。通过使用Redis缓存,更新库存SQL语句避免负库存,以及设置下单后的支付时限来优化流程。此外,文章还提到利用分布式限流和消息队列来降低系统压力,提升系统吞吐量。

这个小伙伴们是不是发现有问题了,这么大量的请求过来,走数据库肯定是不行的,想到的肯定是把库存放到缓存中,因为是分布式,所以放到Redis中
那就有个问题了,什么时候把商品库存放到缓存中?

最好的方式就是通过后台管理系统,因为我们新建一个秒杀商品,肯定是通过后台管理系统操作的,添加秒杀商品后,应该会有一个类似按钮【上线发布】,可以在这个按钮事件进行缓存,当然小伙伴们可根据自己的业务。

扣库存

一、秒杀扣库存,经常会出现【超卖】,这个是什么原因呢?我们看一下扣库存的代码:
图片
直接执行sql语句,把库存减一。我们再看一下整体代码,先检查库存,有库存再扣库存

//验证是否有库存
if(checkGoodStock(goodId) <= 0){
return 0; //表示无库存了
}
//扣库存
deductGoodStock(goodId);

二、举个例子:

如:我们现在的剩余库存为1,同时有2个线程请求过来,又同时执行到验证库存代码块,这样就都通过了验证,然后又先后执行了扣库存,但扣库存是直接减1的,导致库存变成了-1,超卖就此形成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值