代码之家  ›  专栏  ›  技术社区  ›  S.K.

购物车中的最后一项

  •  0
  • S.K.  · 技术社区  · 6 年前

    例如,我从Amazon上选择了一个项目,它只有一个项目有现货。我从两个不同的帐户登录并将物品放入购物车。我甚至从帐户和网站都到达了付款页面,并没有限制我说,该项目是不可用的任何地方。我不确定在支付页面之后,从这两个账户进行支付的时间,亚马逊是如何处理的。

    1. 接受两个账户的付款,然后取消其中一个比第一个付款晚的账户的交易。这将不是一个好的做法,虽然它会导致bas的客户体验。
    2. 保留少量物品,以防超售。

    请分享,如果你们有类似的问题,并解决了它,即使有一些限制。如果我需要更多的细节,请告诉我。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Anunay    6 年前

    所以,如果你想确保准确地将库存映射到订单上,就必须锁定库存。如果你打算这么做,问题是你把锁放在哪里。当一个项目被添加到购物车,当用户去付款或付款完成。但是锁的问题是它会让你的系统变慢。 所以这是你应该避免的。

    剩下的所有选项,你已经涵盖在你的问题,它归结为权衡。

    首先,用户体验将受到影响,您还需要承担交易成本。

    第二种选择是要求你准备好卖少卖多卖。 当你保留储备的时候,你基本上是在说我会卖得太少。这也可能适得其反,因为假设你决定预订5件商品,但在结帐和付款时,你同时收到20件商品,你就会回到原点。但它可以帮助在大多数情况下,考虑到你愿意接受打击。

    结帐时进行库存检查可以帮助您获得更好的库存解决方案,但当您实际拥有库存中的最后一个项目,并且有10个人对其进行结帐时,这将无济于事。阅读电话,即使两个这样的要求相吻合,你会给他们库存和回到原点一。

    所以在这种情况下,我要做的是 根据一些分析,我们配置库存检查。对于高和非常高,我们不会做任何检查和预订的项目。关键的,我们拿了锁。(不完全是一个数据库锁,但我们为他们保留库存),对于低和中,我们检查库存,如果我们有足够的继续。所有这些值都是可配置的,可以帮助我们缓解现有的情况。

    上述方法不会帮助您精确地解决问题,但它为您提供了一定程度的自由,使您能够管理库存。

        2
  •  0
  •   Sumit Jha    6 年前

    1. 在付款页面,您应该重新检查产品是否仍然可用。这可以是一个简单的httpget。

    (好处:Redis提供原子操作,因此您也可以在订购产品时成功地处理竞争条件。)