用户注册唯一码redis加锁限制

//        $redis = \Yii::$app->redis;
//        $no_queue_key = 'user_no_list';
//        $getnoListRedis = $redis->rpop($no_queue_key);
//        if(empty($getnoListRedis)){
//            $no = No::find()->where(['uid' => 0])->limit(100)->all();
//            foreach($no as $_v){
//               $res = $redis->lpush($no_queue_key,$_v->no);
//            }
//            $getnoListRedis = $redis->rpop($no_queue_key);
//        }

        //dd($getnoListRedis);

        // 循环取no
        while($no = No::find()->where(['uid' => 0])->limit(1)->one()){
            $key = 'allocateNo:lockKey:'. $no->id;
            // 如果上锁成功,取到数据,退出循环
            if(\Yii::$app->redis->setnx($key,'1')){
                //确定没锁后先赋值redis,锁上先
                \Yii::$app->redis->expire($key, 30); //设置锁的时间,具体看自己的业务场景,一般一个接口请求不超过60秒
                break;
            }
            // 否则等 100 毫秒
            usleep(100);
        }

猜你喜欢

转载自blog.csdn.net/hechenhongbo/article/details/121930523