PHP uniqid()函數(shù)可用于生成不重復(fù)的唯一標(biāo)識符,該函數(shù)基于微秒級當(dāng)前時間戳。在高并發(fā)或者間隔時長極短(如循環(huán)代碼)的情況下,會出現(xiàn)大量重復(fù)數(shù)據(jù)。即使使用了第二個參數(shù),也會重復(fù),最好的方案是結(jié)合md5函數(shù)來生成唯一ID。
這種方法會產(chǎn)生大量的重復(fù)數(shù)據(jù),運(yùn)行如下PHP代碼會數(shù)組索引是產(chǎn)生的唯一標(biāo)識,對應(yīng)的元素值是該唯一標(biāo)識重復(fù)的次數(shù)。
?php $units = array(); for($i=0;$i1000000;$i++){ $units[] = uniqid(); } $values = array_count_values($units); $duplicates = []; foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; } } echo 'pre>'; print_r($duplicates); echo '/pre>'; ?>
這種方法生成的唯一標(biāo)識重復(fù)量明顯減少。
?php $units = array(); for($i=0;$i1000000;$i++){ $units[] = uniqid('',true); } $values = array_count_values($units); $duplicates = []; foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; } } echo 'pre>'; print_r($duplicates); echo '/pre>'; ?>
這種方法生成的唯一標(biāo)識中沒有重復(fù)。
?php $units = array(); for($i=0;$i1000000;$i++){ $units[]=md5(uniqid(md5(microtime(true)),true)); } $values = array_count_values($units); $duplicates = []; foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; } } echo 'pre>'; print_r($duplicates); echo '/pre>'; ?>
使用session_create_id()函數(shù)生成唯一標(biāo)識符,經(jīng)過實(shí)際測試發(fā)現(xiàn),即使循環(huán)調(diào)用session_create_id()一億次,都沒有出現(xiàn)過重復(fù)。 php session_create_id()是php 7.1新增的函數(shù),用來生成session id,低版本無法使用。
以上就是高并發(fā)php uniqid不重復(fù)唯一標(biāo)識符生成方案的詳細(xì)內(nèi)容,更多關(guān)于高并發(fā)php uniqid唯一標(biāo)識符的資料請關(guān)注腳本之家其它相關(guān)文章!
標(biāo)簽:遼陽 克拉瑪依 柳州 白城 六安 鶴崗 鷹潭 唐山
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《高并發(fā)php uniqid不重復(fù)唯一標(biāo)識符生成方案》,本文關(guān)鍵詞 高并發(fā),高,并發(fā),php,uniqid,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。