php如何证明高并发情况下uniqid()函数会生成重复的唯一ID

时间:2016-06-21
我们大家都知道,php uniqid()函数基于当前时间的微妙数生产一个唯一的ID,但是大家有没有考虑到高并发情况下会不会产生重复的唯一ID呢,事实证明是会产生的

请看下面实例:

<?php
$a = array();
for($i=0; $i<16*16*16*2; $i++){
    $a[$i] = uniqid();
}
$b = array_count_values($a);
$c = array_keys($b, 2);
if($c){
    echo '<pre>';
    print_r($c);
}
echo '<pre>';
print_r(array_count_values($a));
exit;
?>

大家可以把代码复制到本网站的php代码在线调试工具上运行一把,基本每次都有重复。

那么该如何解决高并发情况下uniqid()函数会生成重复的唯一ID呢?

我们可以在uniqid后又加了rand(1, 10000),在1000并发,每进程10次uniqid的情况下,再没有产生重复。