老师,不光有超卖问题,还有超买问题。

超卖问题

用了课程的 Redis 方案来做秒杀,经过测试出现了超卖。
最终这样修改,经过几次测试没有出现超卖。
app/Services/OrderService.php

use Illuminate\Support\Facades\Redis;
.
.
.
    public function seckill(User $user, array $addressData, ProductSku $sku)
        $order = \DB::transaction(function () use ($user, $addressData, $sku) {
            // 直接先扣减 Redis 中的值,通过返回值判断库存
            if (Redis::decr('seckill_sku_'.$sku->id) < 0) {
                throw  new  InvalidRequestException('该商品库存不足');
            }
            .
            .
            .
            // Redis::decr('seckill_sku_'.$sku->id);

            return $order;
        });
        .
        .
        .
    }
.
.
.

超买问题

登录到管理后台,将秒杀商品的 SKU 库存改为 20 的时候。总共 10 个用户,经过测试,有几个用户下了不止 1 单;也就是说 10 个用户下了 10 多单。
问题出在同一个用户并发请求过高,导致多下单。正常情况谁会同一时间点击那么高的次数下单。
解决问题思路:在秒杀下单逻辑的事务里加上 用户已经下单了该商品 的判断。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!