成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP使用SnowFlake算法生成唯一ID

Blackjun / 1772人閱讀

摘要:使用算法生成唯一前言最近需要做一套系統(tǒng),由于功能比較單一,而且要求靈活,所以放棄了這樣的成熟系統(tǒng),自己做一套相對(duì)簡(jiǎn)單一點(diǎn)的。默認(rèn)情況下的時(shí)間戳可以支持該算法使用到年,的工作機(jī)器可以支持臺(tái)機(jī)器,序列號(hào)支持毫秒產(chǎn)生個(gè)自增序列。

使用SnowFlake算法生成唯一ID

前言:最近需要做一套CMS系統(tǒng),由于功能比較單一,而且要求靈活,所以放棄了WP這樣的成熟系統(tǒng),自己做一套相對(duì)簡(jiǎn)單一點(diǎn)的。文章的詳情頁(yè)URL想要做成url偽靜態(tài)的格式即xxx.html 其中xxx考慮過(guò)直接用自增主鍵,但是感覺這樣有點(diǎn)暴露文章數(shù)量,有同學(xué)說(shuō)可以把初始值設(shè)高一點(diǎn),可是還是可以通過(guò)ID差算出一段時(shí)間內(nèi)的文章數(shù)量,所以需要一種可以生成唯一ID的算法。

考慮過(guò)的方法有

直接用時(shí)間戳,或者以此衍生的一系列方法

Mysql自帶的uuid

以上兩種方法都可以查到就不多做解釋了

最終選擇了Twitter的SnowFlake算法

這個(gè)算法的好處很簡(jiǎn)單可以在每秒產(chǎn)生約400W個(gè)不同的16位數(shù)字ID(10進(jìn)制)

原理很簡(jiǎn)單

ID由64bit組成

其中 第一個(gè)bit空缺

41bit用于存放毫秒級(jí)時(shí)間戳

10bit用于存放機(jī)器id

12bit用于存放自增ID

除了最高位bit標(biāo)記為不可用以外,其余三組bit占位均可浮動(dòng),看具體的業(yè)務(wù)需求而定。默認(rèn)情況下41bit的時(shí)間戳可以支持該算法使用到2082年,10bit的工作機(jī)器id可以支持1023臺(tái)機(jī)器,序列號(hào)支持1毫秒產(chǎn)生4095個(gè)自增序列id。

下面是PHP源碼



調(diào)用方法如下

Particle::generateParticle($machineId);//生成ID
Particle::timeFromParticle($particle);//反向計(jì)算時(shí)間戳

這里我做了改良 如果機(jī)器ID傳0 就會(huì)去掉這10bit 因?yàn)橛行r(shí)候我們可能用不到這么多ID

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22155.html

相關(guān)文章

  • PHP實(shí)現(xiàn)Snowflake生成分布式唯一ID

    摘要:使用生成很多都是在分布式場(chǎng)景下使用,我看了下網(wǎng)上有其中有幾篇實(shí)現(xiàn)的都沒有考慮到線程安全?,F(xiàn)在有了的鎖和協(xié)程的加持,對(duì)于我們開發(fā)線程安全和高并發(fā)模擬還是很方便的,這里用結(jié)合來(lái)學(xué)習(xí)下實(shí)現(xiàn)最簡(jiǎn)單的好久沒寫,感覺沒有真寫不了了。 Twitter 的 snowflake 在分布式生成唯一 UUID 應(yīng)用還是蠻廣泛的,基于 snowflake 的一些變種的算法網(wǎng)上也有不少。使用 snowflake...

    luodongseu 評(píng)論0 收藏0
  • Snowflake分布式ID生成算法PHP的版本

    摘要:所以就誕生了這個(gè)項(xiàng)目,以下為線程安全版本和非線程安全版本差別。非線程安全版本線程安全版本安裝示例注意區(qū)間在超出范圍將會(huì)報(bào)告一個(gè)致命錯(cuò)誤協(xié)議版權(quán)歸屬于請(qǐng)遵守協(xié)議 php_snowflake 項(xiàng)目地址 什么是 php_snowflake? 推特分布式id生成算法SnowFlake PHP 的實(shí)現(xiàn) 需求 PHP >= 5.6 (5.5以下的自行測(cè)試) 不支持windows 說(shuō)明 純PH...

    alphahans 評(píng)論0 收藏0
  • php + redis + lua 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的發(fā)號(hào)器(1)-- 原理篇

    摘要:出于以上兩個(gè)原因,我們需要自己的發(fā)號(hào)器來(lái)產(chǎn)生。與此同時(shí),為了保證執(zhí)行,具有原子性,我們使用來(lái)進(jìn)行實(shí)現(xiàn)。由于能力和水平有限,難免會(huì)有紕漏,希望及時(shí)指出。參考文章分布式生成器實(shí)現(xiàn)上實(shí)現(xiàn)原理 1、為什么要實(shí)現(xiàn)發(fā)號(hào)器 很多地方我們都需要一個(gè)全局唯一的編號(hào),也就是uuid。舉一個(gè)常見的場(chǎng)景,電商系統(tǒng)產(chǎn)生訂單的時(shí)候,需要有一個(gè)對(duì)應(yīng)的訂單編號(hào)。在composer上我們也可以看到有很多可以產(chǎn)生uuid...

    rottengeek 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<