账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    php+redis抢购功能,并发问题
    42
    0

    今天尝试写并发抢购功能,再网上找了相关资料后,实现了如下:

    <?php
    #开始抢购,检测库存
    $inventoryData = $this->redis->get($inventoryKey);
    if ($inventoryData == null) {
        //库存不足
        return '-1';
    }
    
    #解析json
    $inventoryData = json_decode($inventoryData, true);
    #检测库存
    if ($inventoryData['inventory'] == 0) {
        //库存不足
        return '-1';
    }
    //开启事务
    $this->redis->watch($inventoryKey);
    //事务开始
    $this->redis->multi();
    //将抢购数据加入redis
    $this->redis->lPush('kill_goods_' . $data['goods_id'], json_encode($data));
    $goodsData = ['id' => $data['goods_id'], 'inventory' => $inventoryData['inventory'] - 1];
    $this->redis->set($inventoryKey, json_encode($goodsData));
    $result = $this->redis->exec();
    if ($result) {
        file_put_contents('1.txt', $inventoryData['inventory'] . PHP_EOL, FILE_APPEND);
        return 1;
    }
    return '-1';

    经过并发测试:始终都会有重复的,请各位大佬讲解讲解

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部