自己見過的鎖都是類似先定義一個變量=true,相關操作完成之后再把相關的值變成false.$lock_num=0;while(!redis_helper::lock("lottery")){if($lock_num>=300){return"親,好多人在排隊搶紅包啊,請重新進入頁面";}//0.1susleep(100000);$lock_num++;}下面是并發(fā)鎖定的相關函數(shù),自己能明白這個鎖每6s會變換一次真假值,但是不明白結(jié)合上面的$lock_num針對的并發(fā)情況到底是啥?沒6s變換真假值,6s/0.1s=60次,怎么會達到300,頁面卡住了,其他人恰好重新將鎖設置為假?/***并發(fā)鎖定*@paramstring$name鎖名稱*@paramint$expires超時失效的時間,單位秒*@returnbooltrue:獲取鎖成功,false:獲取鎖失敗*/publicstaticfunctionlock($name,$expires=5){self::init_redis();$key=$name.'_lock';$now=time();$val=$now+$expires+1;if(self::$redis->setnx($key,$val)){returntrue;}else{$old_val=self::$redis->get($key);//失效的情況if($now>$old_val&&$now>self::$redis->getSet($key,$val)){returntrue;}}returnfalse;}
這種并發(fā)鎖的原理是啥
紅糖糍粑
2019-04-16 17:05:21