高并發(fā)php uniqid不重復(fù)唯一標(biāo)識(shí)符生成方案
PHP uniqid()函數(shù)可用于生成不重復(fù)的唯一標(biāo)識(shí)符,該函數(shù)基于微秒級(jí)當(dāng)前時(shí)間戳。在高并發(fā)或者間隔時(shí)長(zhǎng)極短(如循環(huán)代碼)的情況下,會(huì)出現(xiàn)大量重復(fù)數(shù)據(jù)。即使使用了第二個(gè)參數(shù),也會(huì)重復(fù),最好的方案是結(jié)合md5函數(shù)來(lái)生成唯一ID。
方法一這種方法會(huì)產(chǎn)生大量的重復(fù)數(shù)據(jù),運(yùn)行如下PHP代碼會(huì)數(shù)組索引是產(chǎn)生的唯一標(biāo)識(shí),對(duì)應(yīng)的元素值是該唯一標(biāo)識(shí)重復(fù)的次數(shù)。
<?php$units = array();for($i=0;$i<1000000;$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)識(shí)重復(fù)量明顯減少。
<?php$units = array();for($i=0;$i<1000000;$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)識(shí)中沒(méi)有重復(fù)。
<?php$units = array();for($i=0;$i<1000000;$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)識(shí)符,經(jīng)過(guò)實(shí)際測(cè)試發(fā)現(xiàn),即使循環(huán)調(diào)用session_create_id()一億次,都沒(méi)有出現(xiàn)過(guò)重復(fù)。 php session_create_id()是php 7.1新增的函數(shù),用來(lái)生成session id,低版本無(wú)法使用。
以上就是高并發(fā)php uniqid不重復(fù)唯一標(biāo)識(shí)符生成方案的詳細(xì)內(nèi)容,更多關(guān)于高并發(fā)php uniqid唯一標(biāo)識(shí)符的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. XML實(shí)體注入深入理解2. WMLScript腳本程序設(shè)計(jì)第1/9頁(yè)3. XML入門(mén)的常見(jiàn)問(wèn)題(三)4. Xpath語(yǔ)法格式總結(jié)5. CSS Hack大全-教你如何區(qū)分出IE6-IE10、FireFox、Chrome、Opera6. 不要在HTML中濫用div7. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)8. XML 非法字符(轉(zhuǎn)義字符)9. 利用CSS3新特性創(chuàng)建透明邊框三角10. 前端html+css實(shí)現(xiàn)動(dòng)態(tài)生日快樂(lè)代碼
