其实我倒有个新思路
大家在上面谈到的都是怎么生成一定概率不重复的随机字符串,这些概率一般都是在单 server 和少量请求的情况下,一旦放到到复杂的架构中,比如 20 台 servers + 10k/s 请求多半都是歇菜
我想说的是利用一些简单的思路实现 100%不重复的随机字符串,具体如下:
大家只是把随机字符串妖魔化了,其实 1 , 2 , 3 , 4 , 5 不就是不重复的随机字符串吗?好吧如果你要随机字符串 md5(1) 就可以实现,或者利用拼接的方法因为你有 unique 的部分即 1, 2, 3, 4, 5
那么实现方法也很简单
$topic = new Topic();
//TODO add necessary attributes
if ($topic->save()) {
$randString = md5($topic->t_id);
echo $randString;//c20ad4d76fe97759aa27a0c99bff6710
}else{
//save fail, do sth
}
demo code 是用 Yii 写的应该能看得懂
牺牲的是一次数据库写入操作,得到的是一个 unique 的 seed, 这和老实的 order 系统很接近,我唯一做的事情就是把它放到了 RESTful 架构中,真的很好用。
另外附上我前一阵写的一篇文章,希望对楼主有帮助
http://yiilib.com/topic/671/php%E7%94%9F%E6%88%90100%25%E4%B8%8D%E9%87%8D%E5%A4%8D%E9%9A%8F%E6%9C%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95