deepwell / hyperf-uid
参考百度UidGenerator方案, 基于PHP Hyperf框架的唯一ID生成器组件
1.0.3
2023-01-03 15:35 UTC
Requires
- php: >=8.1
- ext-swoole: >=4.5
- hyperf/config: ~2.2.0
- hyperf/database: ~2.2.0
- hyperf/db-connection: ~2.2.0
- hyperf/di: ~2.2.0
- hyperf/dispatcher: ~2.2.0
- hyperf/logger: ~2.2.0
- hyperf/server: ~2.2.0
- hyperf/utils: ~2.2.0
This package is auto-updated.
Last update: 2025-03-10 15:48:23 UTC
README
介绍
参考百度UidGenerator方案, 基于PHP Hyperf框架的唯一ID生成器组件
安装
composer require deepwell/hyperf-uid
创建worker node数据表src/Worker/Mode/worker_node.sql
发布默认配置文件/config/autoload/deepwell_uid.php
php bin/hyperf.php vendor:publish deepwell/hyperf-uid
<?php
declare(strict_types=1);
return [
// 当前时间,相对于时间基点的增量,单位秒
'timestampBits' => 28,
// 机器ID
'workerIdBits' => 22,
// 每秒下的并发序列
'sequenceBits' => 13,
// 时间基点 2022-11-26
'epochSeconds' => 1669392000,
// Buffer size扩容参数, 可提高UID生成的吞吐量
// 原bufferSize=8192, 扩容后bufferSize= 8192 << 3 = 65536
'boostPower' => 3,
// 指定何时向Buffer中填充UID, 取值为百分比(0, 100), 默认为50
// 举例: bufferSize=1024, paddingPercent=50 -> threshold=1024 * 50 / 100 = 512
// 当通道中UID数量 < 512时, 将自动对Buffer进行填充补全
'paddingPercent' => 50,
// 另外一种Buffer填充时机, 周期性检查填充 -->
// 默认:不配置此项, 即不使用用Schedule. 如需使用, 请指定Schedule时间间隔, 单位:秒 -->
//'scheduleInterval'=>60,
];
使用方式
$generator = $this->container->get(GeneratorInterface::class);
$uid = $generator->getUid()
接口
GeneratorInterface
生成器接口, 编排组装各个子模块, 获取UID, 解析UID
DefaultGenerator - 常规雪花ID生成器
CachedGenerator - 默认, 缓存式ID生成器
WorkerIdAssignerInterface
woker id 注册器接口
DisposableWorkerIdAssigner - 默认, 用完即弃的WorkerIdAssigner, 依赖DB操作
BufferInterface
UID Buffer接口, CachedGenerator依赖此接口, 组件默认提供了一个环形数组RingBuffer
BufferedUidProviderInterface
当buffer剩余UID数量达到阈值时, 会开启一个子协程填充buffer, 填充器需要此接口提供未来N秒的UID, 以填满buffer