php 基于时间生成全局唯一id
基于时间 + 随机码生成 id
php 提供了一个生成唯一值生成函数 uniqid ($prefix,$more_entropy), 这是一个基于毫秒级时间生成 id 的函数,
不带参数执行输出 13 位字符随机码,$prefix 返回随机码的前缀,$more_entropy 设为 true 时为加熵,
返回字符会变为 23 位(不包括 $prefix)。编辑代码如下
echo uniqid(); //60892c1563bdb
加前缀 zzs
echo uniqid('zzs'); //zzs60892c8509d8d
加前缀 zzs, true
echo uniqid('zzs', true); //zzs60892ce9ed78c7.08681914
uniqid 加随机数,避免多线程生成时发生重复概率
private function createUniqid(){ $start_time = microtime(true); for($i=1; $i<100000;$i++){ echo uniqid(mt_rand(10,99))."\r\n"; } $end_time = microtime(true); //计算时间 $waste_time = bcsub($end_time, $start_time, 4); echo $waste_time; } //5860892da9f3f72 //8760892da9f40a5 //8960892da9f4141 //1060892da9f418e //4.2923
使用 session_create_id ()
该函数是 php7.1 之后提供的,是 php 用来生成 session_id 使用的,php 使用它来生成每个请求会话,应该唯一是相当好的
echo session_create_id(); //g0322i891nqhh47vg1aeap0d3f
id 计算器生成 id
id 计算器生成 id 就是的首要工作就是要设置一个公共变量,该变量增量为 1,每次进程从这里申请一次 id,id 的值都会加一,这样一直累加下去,就保证了全局唯一性,且都是整数。这方面,Redis 很能胜任,一是性能很好,二是跨机器,另外 Redis 提供的原子性函数 incr,简直天造地设了。
$random = Cache::inc('id'); //长这样子:1,2,3,4,5,...