redis解決高並發下臟讀問題


    //解決並發情況下卡臟讀的問題
    protected function BingFa($mobile, $ent_id){
        $obj = EnterpriseMembers::getNewMemberCardByEntId($mobile, $ent_id);
        if(!$obj){
            return false;
        }else{
            $expire = 10;
            $key = 'new_card_'.$ent_id.'_'.$obj->member_card;
            $is_lock = Yii::$app->redis_php->setnx($key, time()+$expire);
            // 不能獲取鎖
            if(!$is_lock){
                $lock_time = Yii::$app->redis_php->get($key);
                if(time()>$lock_time){
                    Yii::$app->redis_php->del($key);
$is_lock = Yii::$app->redis_php->setnx($key, time()+$expire); }else{ return $this->BingFa($mobile, $ent_id); } } //如果鎖成功 if($is_lock){ $obj->mobile = $mobile; if($obj->save()){ Yii::$app->redis_php->del($key); return $obj; } } } }

 


免責聲明!

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



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