您的位置:首页 > 编程语言 > PHP开发

高并发 php uniqid 不重复唯一标识符生成方案

2016-09-01 16:43 561 查看
http://www.51-n.com/t-4264-1-1.html

PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结合md5函数来生成唯一ID。
PHP uniqid() 生成不重复唯一标识方法一

这种方法会产生大量的重复数据,运行如下PHP代码会数组索引是产生的唯一标识,对应的元素值是该唯一标识重复的次数。

<?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>';

?>

复制代码
PHP uniqid() 生成不重复唯一标识方法二
这种方法生成的唯一标识重复量明显减少。

<?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>';

?>

复制代码
PHP uniqid() 生成不重复唯一标识方法三

这种方法生成的唯一标识中没有重复。

<?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>';

?>

复制代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: