传统的创建uuid的方法是自己写个函数实现随机

<?php
function create_uuid($prefix="") {
$chars = md5(uniqid(mt_rand(), true));
$uuid = substr ( $chars, 0, 8 ) . '-'
. substr ( $chars, 8, 4 ) . '-'
. substr ( $chars, 12, 4 ) . '-'
. substr ( $chars, 16, 4 ) . '-'
. substr ( $chars, 20, 12 );
return $prefix.$uuid ;
} $uuid = create_uuid();
var_dump($uuid);

不过现在有扩展了 就使用扩展吧

使用 apt search uuid 搜索一下

sudo apt search uuid

得到结果

然后就安装吧

使用命令

sudo apt-get install php7.4-uuid

安装

$ sudo apt-get install php7.4-uuid
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'php-uuid' instead of 'php7.4-uuid'
The following NEW packages will be installed:
php-uuid
0 upgraded, 1 newly installed, 0 to remove and 95 not upgraded.
Need to get 8,520 B of archives.
After this operation, 51.2 kB of additional disk space will be used.
Get:1 http://cn.archive.ubuntu.com/ubuntu focal/universe amd64 php-uuid amd64 1.1.0-1build1 [8,520 B]
Fetched 8,520 B in 1s (14.4 kB/s)
Selecting previously unselected package php-uuid.
(Reading database ... 222525 files and directories currently installed.)
Preparing to unpack .../php-uuid_1.1.0-1build1_amd64.deb ...
Unpacking php-uuid (1.1.0-1build1) ...
Setting up php-uuid (1.1.0-1build1) ...
Processing triggers for libapache2-mod-php7.4 (7.4.3-4ubuntu2.4) ...
Processing triggers for php7.4-cli (7.4.3-4ubuntu2.4) ...

可以看到此时扩展已经有了

$ php -m |grep uuid
uuid

web 端需要 sudo /etc/init.d/apache2 restart 一下

然后 phpinfo()

之后使用php 函数  uuid_create 即可。

<?php

$uuid = uuid_create(1);
var_dump($uuid);

cli 端得到

string(36) "a84f0c4e-a24b-11eb-87fd-9f2061574580"

web 端得到

经过测试发现还是扩展的方式实现更快。

传统方式实现uuid 100万次

代码

<?php
function create_uuid($prefix="") {
$chars = md5(uniqid(mt_rand(), true));
$uuid = substr ( $chars, 0, 8 ) . '-'
. substr ( $chars, 8, 4 ) . '-'
. substr ( $chars, 12, 4 ) . '-'
. substr ( $chars, 16, 4 ) . '-'
. substr ( $chars, 20, 12 );
return $prefix.$uuid ;
} $start_time = microtime(true);
for ($i=0; $i < 1000000; $i++) {
$uuid = create_uuid(1);
}
$end_time = microtime(true);
var_dump(($end_time-$start_time));
exit;

效果

扩展实现

<?php
$start_time = microtime(true);
for ($i=0; $i < 1000000; $i++) {
$uuid = uuid_create(1);
}
$end_time = microtime(true);
var_dump(($end_time-$start_time));
exit;

效率几乎提升一倍啊!看来还是扩展厉害啊,毕竟扩展都底层语言了嘛。

不过单次执行一次来看时间几乎可以忽略不计

传统方式得到的时间是 4.9829483032227E-5

扩展方式得到的时间是 2.6941299438477E-5

但是单次的这个耗时对比极不稳定,有时候传统方式用时反而短,这个扩展有时候时间也用的长,这说明单次其实两者并没有太大差异。而如果这个东西用到了百次 、万次循环的时候,它使用扩展就很有用了。

php 如何创建uuid的更多相关文章

  1. iOS创建UUID

    - (NSString *)getUUID { CFUUIDRef uuidObj = CFUUIDCreate(nil); //create a new UUID NSString * uuidSt ...

  2. c++ 创建 uuid guid

    如果没安装,先安装: [root@localhost]# yum install libuuid-devel #include "uuid/uuid.h" 引用 libuuid.s ...

  3. [转帖]瀚高数据库创建uuid的方法

    使用syssso登录,并执行下列语句 highgo=> select set_secure_level('off'); set_secure_level -------------------- ...

  4. UUID的具体用法

    String deleteUuid = UUID.randomUUID().toString(); java.util 类 UUID java.lang.Object java.util.UUID 所 ...

  5. java 的UUID的具体用法

    参照JDK public final class UUIDextends Objectimplements Serializable, Comparable<UUID> 表示通用唯一标识符 ...

  6. Java生成唯一GUID UUID

    GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值. GUID ...

  7. 一个UUID生成算法的C语言实现 --- WIN32版本 .

    一个UUID生成算法的C语言实现——WIN32版本   cheungmine 2007-9-16   根据定义,UUID(Universally Unique IDentifier,也称GUID)在时 ...

  8. 获取设备的UUID

    很多时候需要获取设备的UUID,比如在蓝牙交互时,需要获取服务和特征的UUID,那么如何获取设备的UUID呢?请见如下代码: // // ViewController.m // 获取UUID // / ...

  9. boost uuid

    uuid: uuid库是一个小的使用工具,可以表示和生成UUID UUID是University Unique Identifier的缩写,它是一个128位的数字(16字节),不需要有一个中央认证机构 ...

  10. Python——uuid

    uuid模块在Python 2.5以后引入,接口包括:不可变对象UUID(UUID类)和函数uuid1().uuid3().uuid4()和uuid5(),后面的四个函数用于生成 RFC 4122 规 ...

随机推荐

  1. uni-app 小程序用户信息之头像昵称填写

    小程序获取用户头像昵称,微信又叒做妖,废除之前的接口,改成了头像昵称填写 通知:微信小程序端基础库2.27.1及以上版本,wx.getUserProfile 接口被收回,详见<小程序用户头像昵称 ...

  2. 【YashanDB知识库】ODBC驱动类问题定位方法

    [标题]ODBC驱动类问题定位方法 [需求分类]故障分析 [关键字]ODBC [需求描述]由于我们的ODBC接口目前尚不完善,经常会遇见ODBC接口能力不足导致应用功能无法运行的问题,需要定位手段确定 ...

  3. C# 泛型对象和DataTable之间的相互转换

    应用场景 实际开发场景下会经常出现DataTable和List对象需要相互转换的时候,通过方法提取避免重复造轮子 List转换成DataTable 基本思路: 向DataTable里面添加新的数据内容 ...

  4. Google Analytics & Ads 学习笔记

    更新: 2021-09-13 Naming conversion for event category, action, label https://support.google.com/analyt ...

  5. 网络安全&密码学—python中的各种加密算法

    网络安全&密码学-python中的各种加密算法 一.简介 数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露.篡改或滥用.加密后的数 ...

  6. 线段树can you answer these queries-------hdu4027

    问题描述: 给定一个数列,要求对指定区间内所有数开方,输出查询区间和 输入: 有很多个测试用例,每个用例第一行输出一个整数N,表示数列有N个数,1<=N<=100000;第二行输入N个整数 ...

  7. Docker基本概念(LXC?镜像、容器、仓库是什么?容器和虚拟机又是什么?)(一)

    学习Docker前,我们有必要了解下Docker的前生LXC(Linux Container). 一.LXC介绍 LXC 可以提供轻量级的虚拟化,用来隔离进程和资源,和我们传统观念中的全虚拟化完全不一 ...

  8. Centos LNMP 安装日记

    环境介绍 [root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) mysql8.0.12_b ...

  9. 利用 Page Visibility API 优化网页性能与用户体验

    在现代 Web 开发中,用户可能会频繁切换标签页,或让网页处于后台运行.为了避免不必要的资源浪费并提升用户体验,合理利用 Page Visibility API 可以在页面不可见时暂停或减少资源的消耗 ...

  10. mono 下运行 VB.NET 编写的 WinForm 程序

    操作系统环境 UOS  20 安装 Mono 可以参考 dotnet 在 UOS 国产系统上安装 Mono 开发工具的方法 要点如下 nano /etc/apt/sources.list 增加一行 D ...