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