高并發(fā)php uniqid不重復(fù)唯一標(biāo)識(shí)符生成方案
PHP uniqid()函數(shù)可用于生成不重復(fù)的唯一標(biāo)識(shí)符,該函數(shù)基于微秒級(jí)當(dāng)前時(shí)間戳。在高并發(fā)或者間隔時(shí)長極短(如循環(huán)代碼)的情況下,會(huì)出現(xiàn)大量重復(fù)數(shù)據(jù)。即使使用了第二個(gè)參數(shù),也會(huì)重復(fù),最好的方案是結(jié)合md5函數(shù)來生成唯一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í)中沒有重復(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)過實(shí)際測(cè)試發(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)識(shí)符生成方案的詳細(xì)內(nèi)容,更多關(guān)于高并發(fā)php uniqid唯一標(biāo)識(shí)符的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. python web框架的總結(jié)2. Python如何進(jìn)行時(shí)間處理3. 詳解Python模塊化編程與裝飾器4. python使用ctypes庫調(diào)用DLL動(dòng)態(tài)鏈接庫5. html小技巧之td,div標(biāo)簽里內(nèi)容不換行6. 以PHP代碼為實(shí)例詳解RabbitMQ消息隊(duì)列中間件的6種模式7. python logging 重復(fù)寫日志問題解決辦法詳解8. Python中l(wèi)ogger日志模塊詳解9. python裝飾器三種裝飾模式的簡(jiǎn)單分析10. Python實(shí)現(xiàn)迪杰斯特拉算法過程解析
