PHP库存问题

秒杀这种走reids队列,那日常的商品库存问题,要如何避免超卖。看人家说用行锁,但是比方说我们现在购物车里面20多件商品,是不是开启事物之后对这20件商品都锁定,那如果业务逻辑繁琐的话,到事物提交超过2秒左右,会不会对mysql造成很大压力?

慕尼黑8549860
浏览 648回答 6
6回答

慕田峪7331174

思路大致和楼上的差不多,但是这种 如果有高并发的话 和服务器 架构会有很大的影响,比如 cdn 和负载均衡,如果有问题 ,很容易导致超发

MMTTMM

超买这种问题,是无法完全避免的,不能仅仅在技术上做超卖问题的限定。综合购物体验,并发情况下效率等情况。在购物流程和规则上也要做优化,像你说的非秒杀情况,正常售卖提前提示买家库存可能不够充足,可能会延期发货什么的。另外楼上说的一些解决方案,也都无法避免一些恶意操作的。例如:提交订单或者加购物车占库存,存在恶拍风险。 付款后更新库存,就会存在超卖风险。 因此,个人认为,除了在技术层面用锁机制和事务操作也好,或是走队列机制等等做好超卖预防措施外,也要在购物规则上做一定的优化,毕竟,这不是秒杀这种亏本赚吆喝的活动,理论上这些日常商品是不限购的,考虑到实际库存提示延期发货等。

MM们

购物车中的商品应该是在假如购物车之前做一次判断,在实际提交订单在做一次判断,实际提交订单完成之后才更新库存。这个逻辑才是合理的。redis中缓存一个num数量,大量的判断落在redis中,真的更新库存之后同步更新掉redis中的字段值。这样能缓解mysql的压力,提交订单的请求依旧是走redis队列。
打开App,查看更多内容
随时随地看视频慕课网APP