Ukey是一个生成唯一ID的PHP扩展模块, 其安装Twitter的 Snowflake算法来生成ID, 所以效率非常高, 而且唯一性非常好.
Ukey的安装非常简单:
wget https://github.com/liexusong/ukey/archive/master.zip $ unzip master.zip $ cd ./ukey-master $ phpize $ ./configure $ make $ sudo make install
Ukey提供3个有用的函数:
ukey_next_id() 用于生成唯一ID
ukey_to_timestamp(ID) 用于将ID转换成时间戳
ukey_to_machine(ID) 用于将ID转换成机器信息
Ukey模块的配置项:
[ukey] ukey.datacenter = integer ukey.worker = integer ukey.twepoch = uint64
datacenter配置项是一个整数, 用于设置数据中心;
worker配置项是一个整数, 用于设置数据中心的机器序号;
twepoch配置项是一个64位的整数, 用于设置时间戳基数, 此值越大, 生成的唯一ID越小.
遇到一个编译时的小问题。发生在php5.6.18版本上。编译出错:/ukey-master/php_ukey.h:75: 错误:与‘__uint64_t’类型冲突
出错原因是因为在/usr/include/bits/types.h:45: 附注:‘__uint64_t’的上一个声明在此
然后,简单处理了下 将
/ukey-master/php_ukey.h:75 行的 typedef unsigned long long int __uint64_t;替换成typedef unsigned long long int __uint64_t2;
将last_timestamp,twepoch的类型都替换成__uint64_t2即可,编译通过,可以正常使用
原文链接:PHP唯一ID生成模块 Ukey,转载请注明来源!