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

超卖问题

用了课程的 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 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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