电商订单技术方案梳理-续

本文详细探讨了电商订单在高并发场景下的库存扣减和订单写入问题。提出了五种库存扣减方法,包括直接更新、条件更新、分布式锁、Redis原子操作和乐观锁,分析了各自的优缺点。对于订单写入,讨论了下单时扣减和支付时扣减库存的策略,并解释了在高并发下如何利用消息队列缓解数据库压力。
摘要由CSDN通过智能技术生成

原来简单的整理一下订单业务,但是下面的评论网友望我参看
http://jblog.top/article/details/255453

看了之后我又突发感想,再作一篇续。作续的目的,是将之前没有理清楚的再理一理。

对于高并发情况下的电商下订单,需要解决的技术难点,主要集中在如下几个方面:
1.如何扣减库存;
2.如何写入订单;
3.如何完成支付,这个太复杂,不展开了

下面我们来回答上面的1,2两个问题。

1.如何扣减库存

方法1.update Product set availableNum = availableNum - ?2 , reserveNum = reserveNum + ?2 where id = ?1

这种方法的缺陷是不安全,可能会出现库存扣错,并且方法不幂等。举例说明:库存有2件,A,B两个用户同时发出请求,购买量都为2,分别获取了剩余库存量2,然后执行相应的扣减库存,并且顺利完成,最终库存为了-2,这个是不对的。另一种场景就是调用扣减库存方法,数据库没有顺利的返回(原因有很多,并发,网络,断电),那是否再重试?最终库存变成了-2,-4,-6都有可能。

方法2.update Product set availableNum = availableNum - ?2 , reserveNum = r

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值