php自动生成不重复的id
PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结合md5函数来生成唯一ID。
说明
string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
获取一个带前缀、基于当前时间微秒数的唯一ID。
参数
prefix
有用的参数。例如:如果在多台主机上可能在同一微秒生成唯一ID。
prefix为空,则返回的字符串长度为13。more_entropy 为 TRUE,则返回的字符串长度为23。
more_entropy
如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。使得唯一ID更具唯一性。
PHP uniqid() 生成不重复唯一标识方法一
这种方法会产生大量的重复数据,运行如下PHP代码会数组索引是产生的唯一标识,对应的元素值是该唯一标识重复的次数。
<?php
$units = array();
for ($i = 0; $i < 100000; $i++) {
$units[] = uniqid();
} $values = array_count_values($units);
$duplicates = [];
foreach ($values as $k => $v) {
if ($v > 1) {
$duplicates[$k] = $v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>
PHP uniqid() 生成不重复唯一标识方法二
这种方法生成的唯一标识重复量明显减少。
<?php
$units = array();
for ($i = 0; $i < 100000; $i++) {
$units[] = uniqid('', true);
} $values = array_count_values($units);
$duplicates = [];
foreach ($values as $k => $v) {
if ($v > 1) {
$duplicates[$k] = $v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>
PHP uniqid() 生成不重复唯一标识方法三
这种方法生成的唯一标识中没有重复。
<?php
$units = array();
for ($i = 0; $i < 100000; $i++) {
$units[] = md5(uniqid(md5(microtime(true)), true));
} $values = array_count_values($units);
$duplicates = [];
foreach ($values as $k => $v) {
if ($v > 1) {
$duplicates[$k] = $v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>
PHP uniqid() 生成不重复唯一标识方法四
使用session_create_id()函数生成唯一标识符,经过实际测试发现,即使循环调用session_create_id()一亿次,都没有出现过重复。
php session_create_id()是php 7.1新增的函数,用来生成session id,低版本无法使用。
链接:https://mp.weixin.qq.com/s/XKlrQZkikOrPhLGn18wXGw
php自动生成不重复的id的更多相关文章
- PHP uniqid 高并发生成不重复唯一ID
http://www.51-n.com/t-4264-1-1.html PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环代码)的情 ...
- PHP下生成非重复的id
PHP在多进程运行的情况下,如果不采用内存锁或者文件锁,基本没办法能解决生成唯一Id的问题.试过了静态变量.单例模式等等.查询到php里的uniqid()函数,最后还是找到了一个折中方式,虽然还是有可 ...
- C# 通过GUID生成不重复的ID
/// <summary> /// 获得32位字符长度的ID /// </summary> /// <param name="information" ...
- 5.30dao-service-controller层,mybatis自动生成。(获取根据id主键获取指定详细数据)
获取权限详细数据:(参考) 1.controller:1.注入Servcie调用方法findConsumerById(参数是id); ...
- ES批量索引写入时的ID自动生成算法
对bulk request的处理流程: 1.遍历所有的request,对其做一些加工,主要包括:获取routing(如果mapping里有的话).指定的timestamp(如果没有带timestamp ...
- MySql主键自动生成,表、实体、C#调用方法
1.表:mysql建表语句 DROP TABLE IF EXISTS `keycode`; CREATE TABLE `keycode` ( `Id` ) NOT NULL AUTO_INCREMEN ...
- Eclipse中R文件不能自动生成
R文件不能自动生成主要是因为编译有错误,这时你想什么办法都是没有用的,clean, fix properties,都不是从根上解决问题. R文件主要是自动生成资源文件的id的,里边静态子类 ...
- mysql 的查询操作语句---自动生成各种不同的序号
1.通过查询语句添加自动生成序号 SELECT m.id,(@a :=@a + 1) AS a FROM 表名 m, (SELECT @a := 0) t1 2.MySQL字符串前后补0 前补0(LP ...
- Solr4.0 如何配置使用UUID自动生成id值
原文链接http://blog.csdn.net/keepthinking_/article/details/8501058#comments 最近学习了Lucene,随便也学习了Solr,Solr规 ...
随机推荐
- WaitForSingleObject的作用[转]
在多线程的情况下,有时候我们会希望等待某一线程完成了再继续做其他事情(比如主线程等待子线程结束完之后,自己再结束),要实现这个目的,可以使用Windows API函数WaitForSingleObje ...
- 19.并发下的ArrayList、HashMap,Integer加锁问题
import java.util.ArrayList; import java.util.Vector; /** * 并发下的ArrayList */ public class ArrayListMu ...
- Dart 和 Flutter 使用json_annotation和json_serializable来处理json数据教程
在学习fultter的时候突然想到如何去处理从服务器获取的json或者将app中的对象数据转换成json上传给服务器 于是研究一下dart对json数据的处理 首先需要依赖下面的第三方库(这里要强调下 ...
- python 找到列表中满足某些条件的元素
a = [0, 1, 2, 3, 4, 0, 2, 3, 6, 7, 5] selected = [x for x in a if x in range(1, 5)] # 找到a中属于[1,5)中 ...
- 65、salesforce的数据分页
<apex:page controller="PagingController"> <apex:form > <apex:pageBlock titl ...
- 1、jQuery操作Dom
1.添加元素 <code> <script language="JavaScript">$().ready(function(){$("input ...
- gradle打成jar包报错 "错误: 找不到或无法加载主类 App"(已经配置过主类)
文章目录 将gradle打成jar包(包括依赖) 运行jar包 报错 原因(src自己手动创建的) 解决(添加src目录) 将gradle打成jar包(包括依赖) jar { manifest { a ...
- python3_列表(修改,添加和删除元素操作)
前言:列表的定义:列表是由一系列按特定顺序排列的元素组成.即列表是一个有序集合. 1.修改列表元素 由前言知列表是一个有序集合,因此在修改列表元素时我们需指定列表名和要修改的元素的索引,再指定该元素的 ...
- for in 的实现
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- camunda
Camunda BPM 用途: 流程管理.流程解决方案 支持语言: java ,nodejs 入门指导:1.https://docs.camunda.org/get-started/quick-s ...