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