随机生成固定的位数(比如8位)的数字,
作为用户注册的uid存入数据库,
每个uid不重复,
但可以是12345678,12345677。
有种方法是随机生成8位数字,
然后查询数据库有无此数据,
有则重新生成在查询,
无则写入数据库,
这样的方式比较费时。
有没有更好的方法,
比如结合别的随机值、时间戳之类的。
求解题思路或者方法,可用php实现
怪我咯2017-04-10 14:56:51
通常数据库中存储的就是时间戳,也就是当前系统时间的毫秒数,然后除以1000,获取当前时间的秒数做为uid即可,因为如要存储的是毫秒的话,它占用数据库太长,用秒数即可保证唯一不重复。如果想让生成uid不只是数字还要有字母的话,可以将秒数转成16进制即可。
天蓬老师2017-04-10 14:56:51
用户注册的uid,在某个范围自增就可以吧。
假设用户注册的qps没有那么高,可以利用update+私有复杂数据的方法在mongodb模拟一个锁,锁保护“上次注册的用户的uid”数据,每次拿锁,加一,注册,将锁保护的uid+1,释放锁即可。
PHP中文网2017-04-10 14:56:51
1 2 3 4 5 |
|
迷茫2017-04-10 14:56:51
很高兴为LZ解答这个问题。
首先,有什么东西是不停递增,并且不会重复的?
时间。
正如LZ猜想的那样,使用时间截转化成数字,可以产生始终递增并且不会重复的数字。
并且,这些数字还可以根据时间的推移,看大小就知道注册先后和注册时间。
这里仅仅是抛砖引玉。
1 2 3 4 5 6 7 |
|
LZ可以把$unix_stamp作为随机uid,如果认为秒数产生的数值不够随机的话
(比如1秒内有多人同时注册),可以在$unix_stamp后加上microtime()函数转换成数字
来使得这个数字更加随机,以避免uid重复的问题。