progamesigner / snowflakes
PHP中的去中心化k-顺序UUID生成器
v0.1.1
2018-04-24 04:26 UTC
Requires
- php: >=5.6.3
This package is auto-updated.
Last update: 2024-09-21 19:50:24 UTC
README
- 一个简单的128位ID生成器。
- 将雪花ID转换为字符串的方法
Snowflakes生成128位和按时间排序的ID。它们在基础设施中的每个节点上运行,并将在需要时生成不冲突的ID,无需协调。
该项目灵感来自Twitter的Snowflake和Discord的Go实现,但扩展到128位,且与Twitter的Snowflake不兼容。此库提供ID生成的基础,但不提供分发ID或节点ID协调的服务。
入门指南
安装
composer require progamesigner/snowflakes
用法
use ProGameSigner\Snowflakes\Node; $node = new Node($worker_id); $some_id = $node->next()->toString();
如果你正在使用Laravel,你可以使用此包附带的SnowflakesServiceProvider
。使用config('services.snowflakes.id', $worker_id)
配置worker id
,并通过resolve('snowflakes')->next()
获取雪花ID。
格式
雪花ID是128位宽,如下所示,从最高有效位到最低有效位
- 时间戳(64位)-自纪元(1970年1月1日)以来的毫秒数
- 节点ID(48位)-可配置的节点ID
- 序列(16位)-通常为0,当同一毫秒内有多个请求时增加,当时钟前进时重置为0
系统时钟依赖性
你应该使用NTP来保持系统时钟的准确性。当检测到非单调时钟时,雪花将保留请求。要运行不移动时钟的NTP模式,请参阅http://wiki.dovecot.org/TimeMovedBackwards#Time_synchronization以获取有关如何执行此操作的提示。
相关项目
维护者
贡献
- 在GitHub上 Fork仓库
- 将项目克隆到您的机器上
- 将更改提交到您的分支
- 将您的作品推回到您的Fork
- 提交一个拉取请求,以便我可以审查您的更改
许可
MIT © 杨生汉