简单的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;
    }

 

posted @ 2020-04-13 12:58  joker_one  阅读(1095)  评论(0编辑  收藏  举报