隨機(jī)生成難點(diǎn)是在于如何避免碰撞,有人說(shuō)用md5,guid這些機(jī)制啊,當(dāng)然可以,但是做為賬號(hào),看著有亂,而且生成位數(shù)也過(guò)長(zhǎng)。
本方法只需要解決1秒內(nèi)的并發(fā)碰撞就可以,因?yàn)楣潭^部采用的是unixtime時(shí)間,精確到秒,超過(guò)1秒,這個(gè)頭部的時(shí)間肯定變化了。同時(shí)本方法也可以用戶隨機(jī)訂單編號(hào)的生成。
測(cè)試條件是用循環(huán)創(chuàng)建1萬(wàn)個(gè)隨機(jī)賬號(hào)(毫秒級(jí)),0碰撞,10萬(wàn)個(gè)大約有0-3個(gè)碰撞。應(yīng)該沒(méi)有哪個(gè)互聯(lián)網(wǎng)公司會(huì)在瞬間同時(shí)創(chuàng)建這么多賬號(hào),所以足夠應(yīng)付數(shù)十億PV這么大的規(guī)模了。
// 自動(dòng)生成隨機(jī)用戶名
// 測(cè)試,循環(huán)創(chuàng)建1萬(wàn)個(gè)隨機(jī)賬號(hào),0碰撞,10萬(wàn)大約0-3個(gè)碰撞,足夠應(yīng)付未來(lái)數(shù)十億級(jí)PV
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
private function genUserNumber() { $chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $username = ""; for ( $i = 0; $i < 6; $i++ ) { $username .= $chars[mt_rand(0, strlen($chars))]; } return strtoupper(base_convert(time() - 1420070400, 10, 36)).$username; }
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)