java秒杀怎么防止超卖 (秒杀价格低怎么办)

#挑战30天在头条写日记#

在电商系统中超卖经常发生,那么超卖是怎么产生的呢,请看下图

java秒杀怎么防止超卖,秒杀如何限制下单

库存只有2件商品,小黄先下单了,但是这个时候他还没有付款,这个时候小蓝也下单了并且付款了,这个时候通知扣库存,然后小黄付款成功了这个通知扣库存,库存没有了,超卖产生了。

java秒杀怎么防止超卖,秒杀如何限制下单

要解决超卖我们先要了解几个概念,分布式事务锁,原子操作

分布式锁:控制分布式系统有序去对共享资源进行操作,通过互斥来保持一致性

java秒杀怎么防止超卖,秒杀如何限制下单

分布式锁

原子操作:不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到另一个线程。

java秒杀怎么防止超卖,秒杀如何限制下单

java秒杀怎么防止超卖,秒杀如何限制下单

了解了上面的几个概念我们再说回超卖的情况

java秒杀怎么防止超卖,秒杀如何限制下单

通过这个图可以很直观的看到超凡的逻辑,那么怎么去解决?就是加分布式锁,怎么加?这样加

java秒杀怎么防止超卖,秒杀如何限制下单

第一个用户进来提交订单后增加锁,第二个用户必须等待第一个用户流程结束后获得锁再进行下面的流程,也体现了一致性和原子性的特征

下面说几个我们在秒杀的时候经常遇到的问题

1、小程序缓存的问题

java秒杀怎么防止超卖,秒杀如何限制下单

2、限制购买,但是到达上限还能购买

java秒杀怎么防止超卖,秒杀如何限制下单

3、流控的问题

java秒杀怎么防止超卖,秒杀如何限制下单

以上是秒杀场景经常遇到了几个问题,大家可以参考解决方案,也欢迎大家留言私下沟通讨论电商系统的各类问题,老R一定知无不言言无不尽。

#头条创‮挑作‬战赛#