项目地址
什么是 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&#61;0; $i <10; $i&#43;&#43;) { echo PhpSnowFlake::nextId($service_no)."\n";
}
/*00146523488416500999000634280001
00146523488416500999000634280002
00146523488416500999000634280003
00146523488416500999000634280004
00146523488416500999000634280005
00146523488416600999000634280001
00146523488416600999000634280002
00146523488416600999000634280003
00146523488416600999000634280004
00146523488416600999000634280005*/
协议
版权 (c) 2016 归属于 Towers 请遵守MIT协议.