摘要:所以就誕生了這個(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ō)明純PHP無(wú)法實(shí)現(xiàn)SnowFlake算法,因?yàn)榫€程安全版本(需要tid)和非線程安全版本(需要pid)不能生成相同格式的id(本項(xiàng)目的tid是系統(tǒng)中唯一的所以不用擔(dān)心多個(gè)進(jìn)程中tid沖突),并且PHP作為腳本語(yǔ)言無(wú)法維護(hù)sequence,當(dāng)腳本結(jié)束的時(shí)候sequence又要被初始化,所以在大并發(fā)情況純PHP實(shí)現(xiàn)的版本SnowFlake算法根本沒(méi)有什么作用。所以就誕生了這個(gè)項(xiàng)目,以下為線程安全版本和非線程安全版本差別。
非線程安全版本(NTS)0 2 15 20 28 32 ---+----------------+--------------+----+----------+ 00 |timestamp(ms) | service_no |pid | sequence | ---+----------------+--------------+----+----------+線程安全版本(TS)
0 2 15 20 28 32 ---+----------------+--------------+----+----------+ 00 |timestamp(ms) | service_no |tid | sequence | ---+----------------+--------------+----+----------+安裝
phpize ./configure --with-php-config=/you/phppath/php-config make make install示例
注意:$service_no區(qū)間在 0-99999 超出范圍PHP將會(huì)報(bào)告一個(gè)致命錯(cuò)誤!
$service_no = 999; for ($i=0; $i < 10; $i++) { echo PhpSnowFlake::nextId($service_no)." "; } /* 00146523488416500999000634280001 00146523488416500999000634280002 00146523488416500999000634280003 00146523488416500999000634280004 00146523488416500999000634280005 00146523488416600999000634280001 00146523488416600999000634280002 00146523488416600999000634280003 00146523488416600999000634280004 00146523488416600999000634280005 */協(xié)議
版權(quán) (c) 2016 歸屬于 Towers 請(qǐng)遵守MIT協(xié)議.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30354.html
摘要:使用生成很多都是在分布式場(chǎng)景下使用,我看了下網(wǎng)上有其中有幾篇實(shí)現(xiàn)的都沒(méi)有考慮到線程安全?,F(xiàn)在有了的鎖和協(xié)程的加持,對(duì)于我們開(kāi)發(fā)線程安全和高并發(fā)模擬還是很方便的,這里用結(jié)合來(lái)學(xué)習(xí)下實(shí)現(xiàn)最簡(jiǎn)單的好久沒(méi)寫,感覺(jué)沒(méi)有真寫不了了。 Twitter 的 snowflake 在分布式生成唯一 UUID 應(yīng)用還是蠻廣泛的,基于 snowflake 的一些變種的算法網(wǎng)上也有不少。使用 snowflake...
摘要:序本文主要來(lái)聊聊分布式的生成方案。分布式的生成,以為代表的,系列算法采用的就是劃分命名空間并行生成的思路。 序 本文主要來(lái)聊聊分布式id的生成方案。 目標(biāo) 業(yè)務(wù)系統(tǒng)需要什么樣的ID生成器中提出了幾點(diǎn)目標(biāo): 唯一性 時(shí)間相關(guān) 粗略有序 可反解 可制造 主要思路 對(duì)于每個(gè)標(biāo)識(shí),都需要有一個(gè)命名空間(namespace),來(lái)保證其相對(duì)唯一性。分布式的ID生成,以Twitter Snowf...
摘要:出于以上兩個(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è)常見(jiàn)的場(chǎng)景,電商系統(tǒng)產(chǎn)生訂單的時(shí)候,需要有一個(gè)對(duì)應(yīng)的訂單編號(hào)。在composer上我們也可以看到有很多可以產(chǎn)生uuid...
閱讀 3310·2021-09-09 11:39
閱讀 1240·2021-09-09 09:33
閱讀 1139·2019-08-30 15:43
閱讀 557·2019-08-29 14:08
閱讀 1742·2019-08-26 13:49
閱讀 2390·2019-08-26 10:09
閱讀 1556·2019-08-23 17:13
閱讀 2294·2019-08-23 12:57