micoya / php-snowflake-shm
使用 PHP 和共享内存生成唯一的雪花。
dev-main
2023-06-03 08:13 UTC
Requires
- php: 5.6
This package is auto-updated.
Last update: 2024-10-03 11:01:40 UTC
README
使用 PHP 和共享内存生成唯一的雪花。可能是最快的解决方案。
它需要 shmop 和 sysvsem,因此不能在 Windows 操作系统上运行。
性能
- 每个操作 13 微秒(WSL2)
- 每个操作 7 微秒(Linux)
安装
composer require micoya/php-snowflake-shm
示例
简单使用
/** * Default snowflake have * 41 bit milliseconds timestamps * 12 bit machine id * 10 bit sequence */ // Machine-id is 3 $s = Micoya\PhpSnowflakeShm\SnowflakeFactory::makeShm(3); echo $s->id();
自定义机器 ID 长度或时间
$config = new Micoya\PhpSnowflakeShm\Config(); // 16bit machine id , 6bit sequence $config->machine_id_length = 16; $config->start_timestamp = 1685603045000; // use custom config $s = Micoya\PhpSnowflakeShm\SnowflakeFactory::makeShm(3, $config); echo $s->id();
自定义机器 ID 格式助手
如果您想自定义机器 ID 的组成,例如,如果您需要区分机器和工作节点,这里有一个简单的工具可以使用。
// 12 bit id includes // 4 bit machine id, current value is 15 // 8 bit worker id, current value is 1 $helper = new \Micoya\PhpSnowflakeShm\MachineIdHelper(12); $helper->pushToHigh(4, 15); $helper->pushToHigh(8, 1); $result_machine_id = $helper->make(); $config = new Micoya\PhpSnowflakeShm\Config(); $config->machine_id_length = 12; // use custom config $s = Micoya\PhpSnowflakeShm\SnowflakeFactory::makeShm($result_machine_id, $config); echo $s->id();
关于单元测试
由于一些环境原因,我没有使用 PHPUnit,而是编写了一个简单的脚本,请检查 simple_test.php。