PHP高并发下生成唯一识别码

php中文网
发布: 2016-08-08 09:06:35
原创
1551人浏览过

如题,首先谢谢所有来回答的大牛.
描述一下问题:

<code>学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。</code>
登录后复制

现在的问题是:

<code>PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。</code>
登录后复制

回复内容:

如题,首先谢谢所有来回答的大牛.
描述一下问题:

<code>学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。</code>
登录后复制

现在的问题是:

<code>PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。</code>
登录后复制

我提一种方法:预处理标识符

立即学习PHP免费学习笔记(深入)”;

  1. 提前通过算法生成绝对不重复的标识符,这个过程中可以自己进行测试,而且因为是预处理的,不需要考虑时间和算法复杂性。

  2. 将生成的不重复的标识符写入数据库

  3. 在高并发的场景下只使用读取操作

上面主要是解决了高并发下的快速响应问题,那么唯一性如何保证呢?
有两个思路:

  1. 使用队列进行读取,保证所有的读取都是通过唯一的队列来完成,比如使用redis的pop操作

  2. 使用sql的update命令,这个时候需要另外一个字段userid, 伪代码:update TABLE set userid = $userid where userid = 0 limit 1;,然后再使用userid进行查询对应的标识符即可。

    牛NIUCMS本地O2O系统
    牛NIUCMS本地O2O系统

    牛NIUCMS本地O2O系统是一个以php+mysql进行开发的o2o网站系统。NIUCMS是一款强大的网站管理系统。支持智慧城市、智慧小区、智慧乡村、本地生活门户、本地O2O平台的构建。请注意以下几点:1、这套源码必须要服务器支持伪静态,是支持.htaccess规则的伪静态,一般Apache服务器支持,别搞的下载回去以后说什么缺 少文件,其实源码并非缺少文件。2、这套源码请在php 5.4环境下

    牛NIUCMS本地O2O系统 0
    查看详情 牛NIUCMS本地O2O系统

最后,我坚持的观点是:最开始的时候就把代码设计的尽量安全,注意,安全方面的问题一定要高优先级考虑。
至于说,真正的场景中有哪些“高并发”的场景呢?我只想说,出了问题还是要程序员背锅。

如果要求绝对不重复那我感觉思路有两个
1.每次随机产生新建的id数据持久化,然后每次随机产生的数据查历史数据是否重复(但是这每次要数据持久化肯定比较消耗性能)
2.按规律累加(比如按日期时间戳balabala),这样产生过的就不会重复,但是高并发怎么不重复应该就要考虑一下了。

想问问题主比较担心的是并发状态下产生相同的识别码还是比较担心会产生历史重复的识别码?

如果担心是并发状态的话应该考虑你说的微秒级别字符加一定量的随机数就好了(每位随机数可以在48-122之间按ASCII转换为字符),加多几位就好了,虽说理论上没有绝对不重复但是概率应该还是很小了

如果考虑历史重复那我想到的就是一开始说的那两条了

用锁机制试试看。。

1 写文件每次+1
2 你既然是推广系统这个唯一码只要你带上用户id那么就唯一
3 看到这种什么高并发的问题就觉得是自己闲的蛋疼,整个互联网要处理高并发的公司真不多,拿来那么多高并发。感觉现在就是,框架,系统,高并发,缓存成为了程序员的口头禅了。

可以生成一条 插数据库 建个唯一索引 让数据库给你去重

根据数据库中唯一ID生成一个对应的62进制字符串。
比较多的文章分析短网址的规则都是生成62进制,理论上ID不重复也不会重复生成字符串,但是长度是会变的。看是否可接受。
没有那么多真正高并发的事,要求高用用户ID也是一种办法。

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号