标签:而且 地方 自己 isql red 卖出 功率 异常 数据
贴一个问题,我最近遇到,也是很老的:
一个商品有库存,假设只剩最后一件了,库存为1,如果此时有很多个人同时购买此商品怎么办,不可能让两个人都下单成功,库存为-1吧,所以这个在php + mysql中具体怎么解决呢?
商品的库存信息是不是单独做一个表与商品信息表关联起来比较好还是只用一张表好呢?http://segmentfault.com/q/1010000002600161
之前做电商项目的时候也碰见过这个问题但是当时没仔细想也没现在这么懂,回头一想这也是锁,索引上面自己没有理解透。
再贴上我认为比较好的解决方案:
并发转化为串行,通过队列或类似的手段消解并发,后台一个consumer依次扣减库存
并发&加锁,锁的位置可以在mysql或redis或任意自写sever等地方
不过其实,下单到支付还有一定成功率的,所以下单的地方就卡死的话可能由于用户放弃支付反而卖不完,所以这里会有一些非技术的问题需要考量(超卖/有货没卖出去/支付后砍单倾向哪个?),这个扣库存并发的问题不一定发生在下单时候
而且事实上作为一个电商平台我还是认为3是最优解,如果是自己做着玩的话那2是比较好的选择,当然也可以把扣库存留到后面,流程图加一项。
当然下面的回答也涉及到了redis内存加持久化,只不过redis目前还没学就先拿这个改一下看看效果。工程化的解决方法我也看了:https://my.oschina.net/cart/blog/368690#OSC_h1_22
第一篇文章,先说这么多,慢慢来。
标签:而且 地方 自己 isql red 卖出 功率 异常 数据
原文地址:https://www.cnblogs.com/Fireset/p/12363321.html