DonkeyID---php扩展-64位自增ID生成器
##原理
參考Twitter-Snowflake 算法,擴(kuò)展了其中的細(xì)節(jié)。具體組成如下圖:
如圖所示,64bits 咱們分成了4個(gè)部分。
###唯一性保證
100%唯一性保證,根據(jù)nodeid的不一樣保證多服務(wù)器的唯一性,使用共享內(nèi)存+自旋鎖保證單節(jié)點(diǎn)多進(jìn)程的唯一性 同一毫秒內(nèi)自增變量保證并發(fā)的唯一性。
###安裝DonkeyID擴(kuò)展
cd /usr/local/php/include/php/ext sudo git clone https://github.com/osgochina/donkeyid.git cd /usr/local/php/include/php/ext/donkeyid/donkeyid sudo phpize sudo ./configure --with-php-config=/usr/local/php/bin/php-config sudo make && sudo make install?
配置
在php.ini 中配置節(jié)點(diǎn)id
[DonkeyId] ;0-4095 donkeyid.node_id=0 ;0-當(dāng)前時(shí)間戳 donkeyid.epoch=0?
####api接口
- dk_get_next_id()
獲取基于Snowflake算法的id
- dk_get_next_ids(num,num,time=0)
獲取基于Snowflake算法的id列表.num:生成id的數(shù)量,num:生成id的數(shù)量,time:需要生成指定時(shí)間的id.$time 默認(rèn)為0 生成當(dāng)前時(shí)間指定數(shù)量的id
- dk_parse_id($id)
解析基于Snowflake算法的id元數(shù)據(jù),返回值包括:time id生成時(shí)間,node_id 節(jié)點(diǎn)id,sequence 自增數(shù)
- dk_get_ts_id()
獲取10進(jìn)制的時(shí)間戳類型的id
- dk_get_ts_ids(num,num,time=0)
獲取10進(jìn)制的時(shí)間戳類型的id列表.num:生成id的數(shù)量,num:生成id的數(shù)量,time:需要生成指定時(shí)間的id.$time 默認(rèn)為0 生成當(dāng)前時(shí)間指定數(shù)量的id
- dk_parse_ts_id($tsid)
解析10進(jìn)制的時(shí)間戳類型的id元數(shù)據(jù),返回值包括:time id生成時(shí)間,node_id 節(jié)點(diǎn)id,sequence 自增數(shù)
- dk_get_dt_id()
獲取字符串類型的id,顯式包含日期時(shí)間屬性
?
轉(zhuǎn)載于:https://www.cnblogs.com/starfish29/p/11492548.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的DonkeyID---php扩展-64位自增ID生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 评分卡建模
- 下一篇: php 数学函数bc的使用(浮点数计算)