# 《Seckill秒杀系统》第45章:基于分布式锁设计并实现库存防超卖

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/13N8lSiYH (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★★☆☆
  • 本章重点:基于分布式锁实现下单扣减库存时的防超卖问题,重点掌握基于分布式锁实现商品防超卖的原理和方法,并能将其灵活运用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/13N8lSiYH (opens new window)

大家好,我是冰河~~

在前面的文章中,基于数据库设计并实现了商品库存的防超卖效果,其实在真实场景下,基于数据库实现库存防超卖是作为最终的兜底方案,除此之外,还会有很多其他的库存防超卖方案。

# 一、前言

库存防超卖是任何一家互联网大厂在做秒杀系统时,一定要考虑的问题,一旦出现库存超卖的问题,后果是相当严重的,会为平台和商家带来一定的经济损失。在前面的文章中,基于数据库设计并实现了商品库存的防超卖效果。本章,我们就使用另一种方案设计并实现库存防超卖。

# 二、本章诉求

在秒杀系统中,除了基于数据库可以实现商品库存的防超卖外,基于分布式锁也可以实现库存防超卖,在整个实现过程中,利用添加分布式锁后的业务串行化执行的特点来保证业务是串行执行的,也能够保证添加分布式锁后的业务的原子性,以此来实现商品库存的防超卖。本章,就基于分布式锁设计并实现库存的防超卖。

# 三、流程设计

本节,就从下单流程扩展设计,下单减库存流程设计和下单减库存类结构设计三个方面对流程设计进行简单的介绍。

# 3.1 下单流程扩展设计

在下单扣减库存的流程设计中,最终会实现多种方案来防止商品超卖问题,本章,会基于分布式锁设计并实现商品库存防超卖,除此之外,还会有其他的方案实现商品库存防超卖。如图45-1所示。


在库存防超卖的设计中,会借助SpringBoot的@ConditionalOnProperty注解为每种设计方案的实现指定配置项和对应的Value值,比如基于分布式锁设计并实现商品库存防超卖的方案借助@ConditionalOnProperty注解指定的配置项为place.order.type,配置的Value值为lock。

此时,当SpringBoot的application.yml或者application.properties中的place.order.type配置项的值为lock时,项目在启动时,就会默认加载并实例化基于分布式锁设计并实现商品库存防超卖的方案实现类。最终就会基于分布式锁实现商品库存防超卖的方案。

# 3.2 下单减库存流程设计

在秒杀系统中,基于分布式锁实现库存防超卖时,下单减库存的流程设计如图45-2所示。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码