原来简单的整理一下订单业务,但是下面的评论网友望我参看
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