如题,首先谢谢所有来回答的大牛.
描述一下问题:
学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。
现在的问题是:
PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。
我提一种方法:预处理标识符
提前通过算法生成绝对不重复的标识符,这个过程中可以自己进行测试,而且因为是预处理的,不需要考虑时间和算法复杂性。
将生成的不重复的标识符写入数据库
在高并发的场景下只使用读取操作
上面主要是解决了高并发下的快速响应问题,那么唯一性如何保证呢?
有两个思路:
使用队列进行读取,保证所有的读取都是通过唯一的队列来完成,比如使用redis的pop操作
使用sql的update命令,这个时候需要另外一个字段userid, 伪代码:
update TABLE set userid = $userid where userid = 0 limit 1;
,然后再使用userid进行查询对应的标识符即可。最后,我坚持的观点是:最开始的时候就把代码设计的尽量安全,注意,安全方面的问题一定要高优先级考虑。
至于说,真正的场景中有哪些“高并发”的场景呢?我只想说,出了问题还是要程序员背锅。