为了账号安全,请及时绑定邮箱和手机立即绑定

PHP库存问题

PHP库存问题

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

6 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

查看完整回答
反对 回复 2019-03-18
?
MMTTMM

TA贡献1869条经验 获得超4个赞

超买这种问题,是无法完全避免的,不能仅仅在技术上做超卖问题的限定。综合购物体验,并发情况下效率等情况。在购物流程和规则上也要做优化,像你说的非秒杀情况,正常售卖提前提示买家库存可能不够充足,可能会延期发货什么的。
另外楼上说的一些解决方案,也都无法避免一些恶意操作的。
例如:提交订单或者加购物车占库存,存在恶拍风险。

 付款后更新库存,就会存在超卖风险。

因此,个人认为,除了在技术层面用锁机制和事务操作也好,或是走队列机制等等做好超卖预防措施外,也要在购物规则上做一定的优化,毕竟,这不是秒杀这种亏本赚吆喝的活动,理论上这些日常商品是不限购的,考虑到实际库存提示延期发货等。

查看完整回答
反对 回复 2019-03-18
?
MM们

TA贡献1886条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-03-18
  • 6 回答
  • 0 关注
  • 647 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信