我是新手,所以请原谅任何错误。我建立一个电子商务平台来销售某些商品。我想确保如果多个用户大约在同一时间购买相同的产品。如果没有足够的库存,则不应允许用户付款。问题是我不会从数据库中减少库存,直到付款成功为止。当一个用户向其他人付款时,库存可能仍然显示为满,他们可以反过来为不存在的库存下订单。我只是需要一些指导来为加工中的产品库存实施某种锁定机制。就像在预订电影票时一样,座位被阻止,直到交易完成,否则它被释放。我想对库存实施相同的。有任何想法吗? 我正在使用asp.net C#
答案 0 :(得分:1)
我发现的解决方案是在进入支付网关之前减少库存量,并保留一个计时器,只有在付款不成功时,才会在计时器过去后重新启动库存。
答案 1 :(得分:0)
那么,你不能提出解决方案的原因是因为你没有实施,而是业务问题。
一旦定义了业务策略,实施将很容易。
例如,亚马逊允许通过说“我们将在2-4周内交付”来订购或耗尽的产品"。这意味着,您仍然可以订购,只需在产品发布之后立即获得产品。
但是,在你的情况下,如果你有有限的资源(座位/电影票) - 你可以开始把人放在等候名单中。比如,警告他们你的座位已用完,但允许他们正常完成整个过程。然后,当您处理付款时,您可以向没有座位的人发送更详细的电子邮件。有点像航空公司呢。一旦你整理出那些真正买票的人,就可以退还那些没有座位的人。
如果您的问题更深入(就像您正在考虑阻止个别席位) - 绝对要更多地考虑业务政策。比如,你真的需要降低这个水平吗?你不能做航空公司正在做的事情(首先卖掉某些班级的门票,然后让用户选择座位)?再次 - 你的问题的核心是业务,而不是实现。一旦正确定义了用例,您可能只需要使用标准数据库锁。
像这样的过程中最重要的是透明度。老实说用户。通过这个过程让他们了解情况并且不要试图欺骗他们 - 比如显示真正有的座位,只是为了识别他们完成购买。
答案 2 :(得分:0)
就我而言,我使用消息队列(Hangfire)来处理订单并对其进行配置,使得它只在同一产品上按顺序处理一个作业。 FIFO风格。
请注意,您正在为整个订购处理添加新的开销,这会延迟事情。需要重新设计资源以最大限度地缩短时间。