Fork me on GitHub

分布式锁使用场景

超卖血案

案例

我之前有做过p2p理财,其中投资买标会涉及到超募问题,其实和电商中的超卖问题类似。考虑到很多人不了解p2p业务,以下就以电商为例来讲。

看下图:

超卖图

这是一个典型的电商下订单扣库存的操作流程。

假设现在库存只剩一个,有两个线程A和B查询库存,相隔时间极短。

此时A通过2步骤查询到库存还有一个,然后执行3步骤。

在A的步骤3还未执行时,B也通过2步骤查询到库存还有一个,也执行3步骤。

当A、B两个线程都执行完3步骤的时候,库存就变成了-1,出现了超卖。

解决方案

很明显,我们希望线程A在执行2、3步骤的时候,线程B处于等待状态,等A线程的步骤3执行完毕之后,B线程再执行2步骤。此时B线程查出的库存为0,就直接返回客户端卖完了。

如果是单机部署方案,可以使用Synchronized将2、3步骤锁起来。

如果是分布式部署方案,就要使用分布式锁。

本文标题:分布式锁使用场景

原始链接:https://zhaoxiaofa.com/2019/08/30/分布式锁使用场景/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。