当用户同时购买相同商品时,实现库存数量的锁定/检查机制
本文关键字:锁定 检查 机制 检查机 实现 用户 | 更新日期: 2023-09-27 17:56:58
我是新手,所以请原谅任何错误。 我正在建立一个电子商务平台来销售某些商品。 我想确保如果多个用户几乎同时购买相同的产品。 如果没有足够的库存,则不应允许用户进行付款。 问题是在成功付款之前,IM 不会从数据库中减少库存。而一个用户向其他用户付款库存可能仍然看起来已满,他们反过来可以下订单购买不存在的库存。我只需要一些方向来为正在加工的产品库存实施某种锁定机制。就像在预订电影票时,座位被冻结,直到交易完成,否则它被释放。我想为股票实现相同的功能。有什么想法吗?我正在使用 asp.net C#
我发现的解决方案是在进入支付网关之前减少库存数量,并保留一个计时器,只有在付款不成功的情况下,计时器才会在计时器过后重新打开库存。
好吧,您不能提出解决方案的原因是因为您没有实现,而是业务问题。
一旦定义了业务策略,实施将变得容易。
例如,亚马逊允许订购或产品用完,说"我们将在 2-4 周内交付"。这意味着,您仍然可以订购,您稍后会收到产品/一旦产品在途中通过电子邮件发送。
但是,在您的情况下,如果您的资源有限(座位/电影票) - 您可以开始将人们列入候补名单。比如,警告他们您的座位用完了,但允许他们正常完成流程。然后,当您处理付款时,您可以向那些没有座位的人发送更详细的电子邮件。有点像航空公司。一旦你整理出那些真正买了票的人,就会退还那些没有座位的人。
如果你的问题更深(比如你正在考虑阻止个别席位) - 一定要更多地考虑业务政策。比如,你真的需要下降那个水平吗?你不能做航空公司正在做的事情(先卖某舱位的机票,然后再让用户选座位)吗?再说一遍,问题的核心是业务,而不是实施。正确定义用例后,您可能只需要使用标准数据库锁。
在这样的过程中,最重要的是透明度。对用户诚实。让他们了解整个过程,不要试图欺骗他们 - 比如展示更多确实有的座位,只是为了激励他们完成购买。
就我而言,我使用消息队列(Hangfire)来处理订单并将其配置为在同一产品上一次只按顺序处理一个作业。先进先出风格。
请注意,您正在向整个订购处理添加新的开销,这会延迟事情。需要重新构建资源以最大程度地减少该时间。