簡單的PHP+Redis實現秒殺


public function kill() {
        //假裝是用戶的唯一標識
        $uuid = md5(uniqid('user') . time());
        $orderKey = "2020_03_31_user_list";//訂單隊列
        $listKey = '2020_03_31_goods_list';//剩余商品隊列
        $failUserNum = "2020_03_31_fail_user_num";//失敗人數
        $successUserNum = "2020_03_31_success_user_list";//成功用戶隊列
        $r = doWithRedis(function (Redis $redis) use ($listKey, $orderKey, $failUserNum, $successUserNum, $uuid) {
            if ($goodsId = $redis->lPop($listKey)) {//秒殺成功
                //生成訂單
                //庫存減一
                //判斷用戶是否意在成功隊列
                if ($redis->zRank($successUserNum, $goodsId, $uuid)) {//已經在成功隊列
                    return '已經在購買隊列';
                } else {////將幸運用戶存在集合中
                    $redis->zAdd($successUserNum, $goodsId, $uuid);
                }
                $redis->hSet($orderKey, $goodsId, $uuid);
            } else {
                //秒殺失敗
                //將失敗用戶計數
                $redis->incr($failUserNum);
            }
        });
        echo "SUCCESS";
        return $r;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM