商城系统中用户重复提交订单,如何防止库存重复扣减?

提问者:帅平 问题分类:微服务

商城系统中用户提交订单的时候可能会由于用户无提交或者系统超时重试等原因出现同一个订单扣减了多次库存的情况,请问如何防止库存重复扣减的问题?

1 个回答
拽萌少女ω
拽萌少女ω

常见的解决此类库存重复扣减的方案有:

1、订单提交按钮单击置灰,避免重复提交。注:对于按钮置灰这种方案,可以减少用户误触重复提交的可能性,但不能从根本上解决库存被重复扣减的问题,比如通过脚本来刷扣减库存的接口,依旧造成库存的重复扣减。
2、保证库存扣减接口的幂等性。注:保证接口幂等的方案有很多,比如每次扣减库存时,带上唯一的流水号,利用数据库的唯一索引保证幂等等。
3、采用令牌机制。用户提交订单会进行令牌校验,校验通过才能提交订单。注:这种方案保证每次提交的订单是唯一的,如果用户多次下单,那么会产生多个订单。

对于在实际开发中,我们常用的方案一般是接口幂等性的解决方案,也就是:

在库存扣减接口入参中增加订单序列号作为唯一标识,库存扣减时增加一条扣减日志。当接口重复请求时,会优先校验是否已经存在扣减记录,如果已存在则直接返回,避免重复扣减问题

接口幂等性的方案流程如下:

发布于:12个月前 (03-17) IP属地:四川省
我来回答