http://www.51-n.com/t-4264-1-1.html
PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结合md5函数来生成唯一ID。
PHP uniqid() 生成不重复唯一标识方法一
这种方法会产生大量的重复数据,运行如下PHP代码会数组索引是产生的唯一标识,对应的元素值是该唯一标识重复的次数。

  1. <?php
  2. $units = array();
  3. for($i=0;$i<1000000;$i++){
  4. $units[] = uniqid();
  5. }
  6. $values  = array_count_values($units);
  7. $duplicates = [];
  8. foreach($values as $k=>$v){
  9. if($v>1){
  10. $duplicates[$k]=$v;
  11. }
  12. }
  13. echo '<pre>';
  14. print_r($duplicates);
  15. echo '</pre>';
  16. ?>

复制代码

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

  1. <?php
  2. $units = array();
  3. for($i=0;$i<1000000;$i++){
  4. $units[] = uniqid('',true);
  5. }
  6. $values  = array_count_values($units);
  7. $duplicates = [];
  8. foreach($values as $k=>$v){
  9. if($v>1){
  10. $duplicates[$k]=$v;
  11. }
  12. }
  13. echo '<pre>';
  14. print_r($duplicates);
  15. echo '</pre>';
  16. ?>

复制代码

PHP uniqid() 生成不重复唯一标识方法三
这种方法生成的唯一标识中没有重复。

  1. <?php
  2. $units = array();
  3. for($i=0;$i<1000000;$i++){
  4. $units[]=md5(uniqid(md5(microtime(true)),true));
  5. }
  6. $values  = array_count_values($units);
  7. $duplicates = [];
  8. foreach($values as $k=>$v){
  9. if($v>1){
  10. $duplicates[$k]=$v;
  11. }
  12. }
  13. echo '<pre>';
  14. print_r($duplicates);
  15. echo '</pre>';
  16. ?>

复制代码

PHP uniqid() 生成不重复唯一标识方法四
使用session_create_id()函数生成唯一标识符,经过实际测试发现,即使循环调用session_create_id()一亿次,都没有出现过重复。
php session_create_id()是php 7.1新增的函数,用来生成session id,低版本无法使用。

PHP uniqid 高并发生成不重复唯一ID的更多相关文章

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

    高并发 php uniqid 用md5生成不重复唯一标识符方案uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.uniqid(prefix,more_entropy)prefix 可 ...

  2. 高并发分布式系统如何做到唯一Id

    又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...

  3. 多线程模式下高并发的环境中唯一确保单例模式---DLC双端锁

    DLC双端锁,CAS,ABA问题 一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会 ...

  4. java 生成20位唯一ID,生成不会重复的20位数字----https://blog.csdn.net/weixin_36751895/article/details/70331781

    java 生成20位唯一ID,生成不会重复的20位数字----https://blog.csdn.net/weixin_36751895/article/details/70331781

  5. php自动生成不重复的id

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

  6. 高并发之 - 全局有序唯一id Snowflake 应用实战

    前言 本篇主要介绍高并发算法Snowflake是怎么应用到实战项目中的. 对于怎么理解Snowflake算法,大家可以从网上搜索‘Snowflake’,大量资源可供查看,这里就不一一详诉,这里主要介绍 ...

  7. 高并发情况下分布式全局ID

    1.高并发情况下,生成分布式全局id策略2.利用全球唯一UUID生成订单号优缺点3.基于数据库自增或者序列生成订单号4.数据库集群如何考虑数据库自增唯一性5.基于Redis生成生成全局id策略6.Tw ...

  8. PHP下生成非重复的id

    PHP在多进程运行的情况下,如果不采用内存锁或者文件锁,基本没办法能解决生成唯一Id的问题.试过了静态变量.单例模式等等.查询到php里的uniqid()函数,最后还是找到了一个折中方式,虽然还是有可 ...

  9. C# 通过GUID生成不重复的ID

    /// <summary> /// 获得32位字符长度的ID /// </summary> /// <param name="information" ...

随机推荐

  1. java servlet

    回顾 1三要素是什么? 入口(login.html)     处理(LoginServlet.java)  出口 (success.jsp) 2如何访问servlet http://IP:port/p ...

  2. Linux学习笔记之兄弟连

    systemctl --user enable pulseaudio说明:安装完成后系统没有声音,用该命令可以打开.ifconfig eth0 192.168.118.1说明:给网卡设置IP地址.ap ...

  3. linux 如何查找io的进程

    [root@NB ok]# echo chenlin|base64;echo Y2hlbmxpbgo= [root@NB ok]# yum search iotop Loaded plugins: f ...

  4. js倒计时

    /** * 启动,秒杀倒计时 * totalSecond:剩余秒数 * showTime(tm):回调函数,其中tm={day:"",hour:"",min:& ...

  5. MyBatis获取插入记录的自增长字段值

    在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名! <insert id=" ...

  6. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  7. Asp.Net中使用OpenRowSet操作Excel表,导入Sql Server(实例)

    有两种接口可供选择:Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎). Jet 引擎大家都很熟悉,可 ...

  8. STC系列STC10F芯片解密STC10L单片机破解复制技术

    STC系列STC10F芯片解密STC10L单片机破解 STC10F12XE | STC10F12 | STC10F10XE | STC10F10解密 STC10F08XE | STC10F08 | S ...

  9. JMeter执行dos命令

    1.通过java代码实现 参考Java实现操作dos命令 2.直接通过JMeter内置的beanshell脚本操作 String command = "cmd /c start ping w ...

  10. selenium获取Cookie操作

    直接贴代码: Set cookies = dr.manage().getCookies(); for (Cookie cookie : cookies) { System.out.println(&q ...