|
|
|
@ -30,6 +30,15 @@ waynboot-mall是一套全部开源的微商城项目,包含一个运营后台
|
|
|
|
|
|
|
|
|
|
## 商城难点整理
|
|
|
|
|
- todo
|
|
|
|
|
1. 下单流程,库存扣减操作是在下单操作扣减还是在支付成功时扣减?(ps:扣减库存使用乐观锁机制 where goods_num - num >= 0)
|
|
|
|
|
> 1. 下单时扣减,这个方案属于实时扣减,当有大量下单请求时,由于订单数小于请求数,会发生下单失败,但是无法防止短时间大量恶意请求占用库存,
|
|
|
|
|
> 造成普通用户无法下单
|
|
|
|
|
> 2. 支付成功扣减,这个方案可以预防恶意请求占用库存,但是会存在多个请求同时下单后,在支付回调中扣减库存失败,导致订单还是下单失败
|
|
|
|
|
> 并且还要退还订单金额(这种请求就是订单数超过了库存数,无法发货,影响用户体验)
|
|
|
|
|
> 3. 还是下单时扣减,但是对于未支付订单设置一个超时过期机制,比如下单时库存减一,生成订单后,对于未在15分钟内完成支付的订单,
|
|
|
|
|
> 自动取消超期未支付订单并将库存加一,该方案基本满足了大部分使用场景。
|
|
|
|
|
> 4. 针对大流量下单场景,比如一分钟内五十万次下单请求,可以通过设置虚拟库存的方式减少下单接口对数据库的访问。具体来说就是把商品实际库存保存到redis中,
|
|
|
|
|
> 下单时配合lua脚本原子的get和decr商品库存数量(这一步就拦截了大部分请求),执行成功后在扣减实际库存
|
|
|
|
|
|
|
|
|
|
## 文件目录
|
|
|
|
|
```java
|
|
|
|
|