项目地址php
推特分布式id生成算法SnowFlake PHP 的实现git
PHP >= 5.6 (5.5如下的自行测试)github
不支持windows算法
纯PHP没法实现SnowFlake算法,由于线程安全版本(须要tid)和非线程安全版本(须要pid)不能生成相同格式的id(本项目的tid是系统中惟一的因此不用担忧多个进程中tid冲突),而且PHP做为脚本语言没法维护sequence,当脚本结束的时候sequence又要被初始化,因此在大并发状况纯PHP实现的版本SnowFlake算法根本没有什么做用。因此就诞生了这个项目,如下为线程安全版本和非线程安全版本差异。windows
0 2 15 20 28 32 ---+----------------+--------------+----+----------+ 00 |timestamp(ms) | service_no |pid | sequence | ---+----------------+--------------+----+----------+
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)."\n"; } /* 00146523488416500999000634280001 00146523488416500999000634280002 00146523488416500999000634280003 00146523488416500999000634280004 00146523488416500999000634280005 00146523488416600999000634280001 00146523488416600999000634280002 00146523488416600999000634280003 00146523488416600999000634280004 00146523488416600999000634280005 */
版权 (c) 2016 归属于 Towers 请遵照MIT协议.并发