IdCenterSender ---PHP实现-64位分布式自增发号器
C语言实现的PHP扩展的形式
IdCenterSender.so - PHP扩展版本PHP实现64位分布式ID发号器
原理
参考Snowflake算法,根据自身设计情况扩展了其中的细节。具体组成如下图:
如图所示,64bits 分成了4个部分。
最高位舍弃 毫秒级的时间戳,有41个bit.能够使用139年,当然这些是可以扩展的,可以通知指定起始时间来延长这个日期长度。也就是说服务启动开始之后就可以持续使用139年 自定义分布式机器节点id,占位12个bit,能够支持8191个节点。部署的时候可以配置好服务器id,也就是代码里面的node_id变量,每一台机器都需要用不同的node_id来标志,就像mysql的server_id一样 进程(毫秒)自增序号。占位10bit,一毫秒能产生2047个id。
总结特点:
类snowflake算法 ID发号器有效期可以延续从发布开始的139年 分布式支持8191台机器 单进程调用的情况下,并发每秒支持200万个ID生成唯一性保证
同一毫秒内自增变量保证并发的唯一性(采用文件锁的方式对cache文件进行锁定)。
使用
include_once '../cckeyid/IdCenterSender.php';
echo cckeyidIdCenterSender::getInstance()->ck_get_new_id(1);
echo PHP_EOL;
print_r(cckeyidIdCenterSender::getInstance(true)->ck_get_new_id(4));
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。