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规 ...
随机推荐
- python_suit
全局变量 Json:双引号 Suite :ddt中不能用 suit.add(test),应该用 suit.add(loader)
- 【leetcode】910. Smallest Range II
题目如下: 解题思路:我的思路是先找出最大值.对于数组中任意一个元素A[i]来说,如果A[i] + K 是B中的最大值,那么意味着从A[i+1]开始的元素都要减去K,即如果有A[i] + K > ...
- 【leetcode】395. Longest Substring with At Least K Repeating Characters
题目如下: 解题思路:题目要找出一段连续的子串内所有字符出现的次数必须要大于k,因此出现次数小于k的字符就一定不能出现,所以就可以以这些字符作为分隔符分割成多个子串,然后继续对子串递归,找出符合条件的 ...
- SpringDataJpa全部依赖
<properties> <spring.version>4.2.4.RELEASE</spring.version> <hibernate.version& ...
- MySQL主从同步(binlog方式)
原文:https://blog.csdn.net/demonson/article/details/80526533
- 区间第k大的几种解法
区间第K大问题,变化包括带修改和不带修改,强制在线和允许离线 修改主要是单点修改,我们前面也只讨论这种情况. 接下来我们从编程复杂度和时空复杂度来讨论几种做法. 1.整体二分(编程复杂度:低-中,时间 ...
- LiveTelecast直播平台技术图谱skill-map
#直播平台技术图谱 ----##直播 ----###采集- **iOS** * HTTP Live Streaming * DirectShow- **Android** * setPreviewCa ...
- 2、jQuery操作Dom(过滤器与选择器)
1.属性选择器 <script language="JavaScript"> /** * <input type="button" value ...
- 本地安装了flash,前台浏览器还显示需要安装flash?是因为版本需要对应
NPAPI:适用于FireFox(火狐).Safari(苹果).Opera (欧朋,12.17版以下) PPAPI:适用于Chromium浏览器.Opera (欧朋,15.00版以上) ActiveX ...
- Redis安装笔记
到官网查找到最新版本https://redis.io/download ————————————————设置防火墙入站规则 iptables -I INPUT -p tcp –dport -j ACC ...