摘要:所以就誕生了這個項目,以下為線程安全版本和非線程安全版本差別。非線程安全版本線程安全版本安裝示例注意區(qū)間在超出范圍將會報告一個致命錯誤協(xié)議版權歸屬于請遵守協(xié)議
php_snowflake
項目地址
什么是 php_snowflake?推特分布式id生成算法SnowFlake PHP 的實現(xiàn)
需求PHP >= 5.6 (5.5以下的自行測試)
不支持windows
說明純PHP無法實現(xiàn)SnowFlake算法,因為線程安全版本(需要tid)和非線程安全版本(需要pid)不能生成相同格式的id(本項目的tid是系統(tǒng)中唯一的所以不用擔心多個進程中tid沖突),并且PHP作為腳本語言無法維護sequence,當腳本結束的時候sequence又要被初始化,所以在大并發(fā)情況純PHP實現(xiàn)的版本SnowFlake算法根本沒有什么作用。所以就誕生了這個項目,以下為線程安全版本和非線程安全版本差別。
非線程安全版本(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將會報告一個致命錯誤!
$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é)議
版權 (c) 2016 歸屬于 Towers 請遵守MIT協(xié)議.
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/30354.html
摘要:使用生成很多都是在分布式場景下使用,我看了下網(wǎng)上有其中有幾篇實現(xiàn)的都沒有考慮到線程安全?,F(xiàn)在有了的鎖和協(xié)程的加持,對于我們開發(fā)線程安全和高并發(fā)模擬還是很方便的,這里用結合來學習下實現(xiàn)最簡單的好久沒寫,感覺沒有真寫不了了。 Twitter 的 snowflake 在分布式生成唯一 UUID 應用還是蠻廣泛的,基于 snowflake 的一些變種的算法網(wǎng)上也有不少。使用 snowflake...
摘要:序本文主要來聊聊分布式的生成方案。分布式的生成,以為代表的,系列算法采用的就是劃分命名空間并行生成的思路。 序 本文主要來聊聊分布式id的生成方案。 目標 業(yè)務系統(tǒng)需要什么樣的ID生成器中提出了幾點目標: 唯一性 時間相關 粗略有序 可反解 可制造 主要思路 對于每個標識,都需要有一個命名空間(namespace),來保證其相對唯一性。分布式的ID生成,以Twitter Snowf...
摘要:出于以上兩個原因,我們需要自己的發(fā)號器來產(chǎn)生。與此同時,為了保證執(zhí)行,具有原子性,我們使用來進行實現(xiàn)。由于能力和水平有限,難免會有紕漏,希望及時指出。參考文章分布式生成器實現(xiàn)上實現(xiàn)原理 1、為什么要實現(xiàn)發(fā)號器 很多地方我們都需要一個全局唯一的編號,也就是uuid。舉一個常見的場景,電商系統(tǒng)產(chǎn)生訂單的時候,需要有一個對應的訂單編號。在composer上我們也可以看到有很多可以產(chǎn)生uuid...
閱讀 3546·2021-09-09 11:39
閱讀 1291·2021-09-09 09:33
閱讀 1197·2019-08-30 15:43
閱讀 616·2019-08-29 14:08
閱讀 1793·2019-08-26 13:49
閱讀 2447·2019-08-26 10:09
閱讀 1605·2019-08-23 17:13
閱讀 2356·2019-08-23 12:57