资讯专栏INFORMATION COLUMN

Snowflake分布式ID生成算法PHP的版本

alphahans / 1115人阅读

摘要:所以就诞生了这个项目,以下为线程安全版本和非线程安全版本差别。非线程安全版本线程安全版本安装示例注意区间在超出范围将会报告一个致命错误协议版权归属于请遵守协议

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协议.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30354.html

相关文章

  • PHP实现Snowflake生成布式唯一ID

    摘要:使用生成很多都是在分布式场景下使用,我看了下网上有其中有几篇实现的都没有考虑到线程安全。现在有了的锁和协程的加持,对于我们开发线程安全和高并发模拟还是很方便的,这里用结合来学习下实现最简单的好久没写,感觉没有真写不了了。 Twitter 的 snowflake 在分布式生成唯一 UUID 应用还是蛮广泛的,基于 snowflake 的一些变种的算法网上也有不少。使用 snowflake...

    luodongseu 评论0 收藏0
  • 布式id生成方案概述

    摘要:序本文主要来聊聊分布式的生成方案。分布式的生成,以为代表的,系列算法采用的就是划分命名空间并行生成的思路。 序 本文主要来聊聊分布式id的生成方案。 目标 业务系统需要什么样的ID生成器中提出了几点目标: 唯一性 时间相关 粗略有序 可反解 可制造 主要思路 对于每个标识,都需要有一个命名空间(namespace),来保证其相对唯一性。分布式的ID生成,以Twitter Snowf...

    Terry_Tai 评论0 收藏0
  • php + redis + lua 实现一个简单发号器(1)-- 原理篇

    摘要:出于以上两个原因,我们需要自己的发号器来产生。与此同时,为了保证执行,具有原子性,我们使用来进行实现。由于能力和水平有限,难免会有纰漏,希望及时指出。参考文章分布式生成器实现上实现原理 1、为什么要实现发号器 很多地方我们都需要一个全局唯一的编号,也就是uuid。举一个常见的场景,电商系统产生订单的时候,需要有一个对应的订单编号。在composer上我们也可以看到有很多可以产生uuid...

    rottengeek 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<