库存检测和支付问题

来源:10-4 下单与支付的业务流程(库存量检测)

周康武

2019-07-19

场景一

  • 老板有西瓜买吗
  • 老板看了一眼, “有”(第一次检测库存
  • 给我来一个西瓜下单
  • 你刚才问的时候还有, 我再看看(第二次检测库存), 好的,还有西瓜, 5块钱
  • 5块是吧, 给你支付
  • 收您5块, 我拿西瓜给你, 这么多人买西瓜,刚才那个西瓜没被我老婆卖给其他人吧(第三次检测库存
  • 你的西瓜(交易成功, 库存减一

场景二

  • 老板有西瓜买吗
  • 老板看了一眼, “有”(第一次检测库存
  • 给我来一个西瓜下单
  • 你刚才问的时候还有, 我再看看(第二次检测库存
  • 还有西瓜, 拿出西瓜(库存减一),5块钱
    • 5块钱是吧, 给你支付
    • 收你5块(支付成功), 交付西瓜(交易成功
    • 忘记带钱了, 不好意思老板,下次在买吧支付失败
    • 老板把西瓜放回车上(库存加一

老师的支付流程是场景一, 场景一在高并发的时候 , 还是会出现支付成功但是库存为零的情况(第三次检测库存) , 这是可能需要退款给用户 。

如果使用场景二, 好像更贴合生活, 可以避免场景一的问题。

我想问问七月老师 场景二的方案是会不会更好一些, 实现起来成本高吗?

写回答

3回答

萧俊介

2020-07-31

场景二的方案会更好一些,实现起来相对方案一成本会高不少。主要是方案二对用户更友好,不会出现下单成功,但支付的时候却告知没商品的问题(用户感觉被当猴耍)。

但是方案二也不能完全解决并发的问题,因为并发是这样的情况:

A:老板有西瓜买吗

老板:看了一眼, “有”

B:老板有西瓜买吗

老板:看了一眼, “有”

A:给我来一个西瓜 (下单)

还有西瓜, 拿出西瓜(还没来得及记录库存减一)

B:给我来一个西瓜 (下单)

还有西瓜(因为还没来得及记录库存减一), 拿出西瓜

后面就不用说出什么问题了吧~



1
0

慕斯6434603

2021-02-13

正常逻辑应该,下单成功就减库存,订单有效期15分钟或30分钟,订单过期库存返还,在过期时间内支付成功,库存不变。这需要执行一个延迟任务

0
0

7七月

2019-07-20

没什么意义。确实在高并发的时候会出现库存为0,但可能性很低很低了。第二种解决不了这个问题,你库存-1的时候不会出现并发问题?

0
0

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程