`
yuanlanxiaup
  • 浏览: 859411 次
文章分类
社区版块
存档分类
最新评论

PHP利用共享内存构建计数器完成自增数值id生成--适用于网页游戏携带区服号的数值id生成

 
阅读更多

我们之前的id生成是直接用的php的uniqid

存在的问题有:

1. 高并发下容易重复:当高并发适用uniqid来产生唯一id的时候,我的测试数据是:1000并发,每并发产生1000次,实际输出63万uid(可能是标准输出原因未全部输出),5次重复

2. mysql中使用字符串类型的key存在性能问题

使用这里创建的ud_uniqid带来的改变:

优点1. 高并发重复几率降低:我的测试数据是:1000并发,每并发产生1000次,实际输出93万,无重复

优点2. 使用过程中,可以产生唯一的递增数值id,作为mysql主键有性能优势

缺点1. 性能比uniqid略低,耗时约为uniqid的1.5倍(不过在10e-5 -- 10e-4级别的时间差,1.5倍应该可以忽略)

缺点2. windows不能使用(windows不支持usleep)

缺点3. 由于使用了共享内存,所以需要在服务器开启的时候读取上一次的最大值,服务器关闭的时候写入当前的最大值

下面直接上代码了, 代码里面注释很清楚的:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics