秒杀这种走reids队列,那日常的商品库存问题,要如何避免超卖。看人家说用行锁,但是比方说我们现在购物车里面20多件商品,是不是开启事物之后对这20件商品都锁定,那如果业务逻辑繁琐的话,到事物提交超过2秒左右,会不会对mysql造成很大压力?
6 回答
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
MMTTMM
TA贡献1869条经验 获得超4个赞
超买这种问题,是无法完全避免的,不能仅仅在技术上做超卖问题的限定。综合购物体验,并发情况下效率等情况。在购物流程和规则上也要做优化,像你说的非秒杀情况,正常售卖提前提示买家库存可能不够充足,可能会延期发货什么的。
另外楼上说的一些解决方案,也都无法避免一些恶意操作的。
例如:提交订单或者加购物车占库存,存在恶拍风险。
付款后更新库存,就会存在超卖风险。
因此,个人认为,除了在技术层面用锁机制和事务操作也好,或是走队列机制等等做好超卖预防措施外,也要在购物规则上做一定的优化,毕竟,这不是秒杀这种亏本赚吆喝的活动,理论上这些日常商品是不限购的,考虑到实际库存提示延期发货等。
![?](http://img1.sycdn.imooc.com/545869470001a00302200220-100-100.jpg)
MM们
TA贡献1886条经验 获得超2个赞
购物车中的商品应该是在假如购物车之前做一次判断,在实际提交订单在做一次判断,实际提交订单完成之后才更新库存。这个逻辑才是合理的。redis中缓存一个num数量,大量的判断落在redis中,真的更新库存之后同步更新掉redis中的字段值。这样能缓解mysql的压力,提交订单的请求依旧是走redis队列。
- 6 回答
- 0 关注
- 647 浏览
添加回答
举报
0/150
提交
取消