库存扣减

作者: tukangzheng | 来源:发表于2017-10-30 15:48 被阅读328次

    此篇文章来自于京东大神开涛的微信公众号中的内容,感谢开涛大神,慢慢的干活,地址如下:

    https://mp.weixin.qq.com/s/-9fvfJ6KT3xSRQZnlTBBhA

    多人同时购买1件商品,如何安全地扣减库存呢?

    (现实中同一件商品可能会出现多人同时购买的情况,我们可以如何做到并发安全呢?)

    1、伪代码片段1:

    伪代码片段1的设计思想是所有请求过来之后首先去加锁,强制其串行化处理,可见其效率一般不是很高,

    为代码片段2:

    这段代码只是在where条件里面增加了and stockNum >= " + requestBuyNum 即可防止超卖的行为,达到了与上述伪代码1的功能

    如果该商品是促销商品(比如参与了秒杀的商品)并发扣减的几率会更高,那么数据库的压力会更高,这个时候应该怎么去做呢?

    海量的用户秒杀请求,本质上是一个排序,先到先得,但是如此多的请求,注定了有些人是抢不到的,可以在进入上述伪代码Dao层之前增加一个计数器进行控制,比如有50%的流量将直接告诉其抢购失败,伪代码如下所示:

    另外同一个用户,不允许多次抢购同一件商品,我们又该如何去设计呢?

    如果同一个用户拥有不同的账号,来抢购同一件商品,上面的策略就失效了。

    一些公司在发展早期几乎是没有限制的,很容易就可以注册多个账号。也就是网络所谓的“僵尸”账号,数量庞大,如果我们使用几万个僵尸号去混进去抢购,这样就可以大大提升我们中奖的概率,那我们应该如何去应对呢?(用IP去限制,每个IP只能去参与一次抢购,这样就避免了一个IP下的多个“僵尸”号去抢购同一个商品)

    另外将库存系统的核心表结构设计提供出来供大家参考

    库存主表,命名规则:stock_center_00~99

    库存流水表,命名规则:stock_center_flow_00~99

    库存批量操作日志表,命名规则:batch_upload_log

    相关文章

      网友评论

        本文标题:库存扣减

        本文链接:https://www.haomeiwen.com/subject/vqoppxtx.html