基于时间 + 随机码生成 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,...