一、并发业务场景

库存业务,stock(sid, num),其中:

sid为库存id

num为库存值

image.png

如上图所示,两个并发的查询库存操作,同时从数据库都得到了库存是5。

接下来用户发生了并发的库存扣减动作:

image.png

如上图所示:

用户1购买了3个库存,于是库存要设置为2

用户2购买了2个库存,于是库存要设置为3

这两个设置库存的接口并发执行,库存会先变成2,再变成3,导致数据不一致(实际卖出了5件商品,但库存只扣减了2,最后一次设置库存会覆盖和掩盖前一次并发操作)

二、不一致原因分析

出现数据不一致的根本原因,是设置操作发生的时候,没有检查库存与查询出来的库存有没有变化,理论上:

仅库存为5的时候,用户1的库存设置2才能成功

仅库存为5的时候,用户2的库存设置3才能成功

实际执行的时候:

库存为5,用户1的set stock 2确实应该成功

库存变为2了,用户2的set

收藏 打印