micoya/php-snowflake-shm

使用 PHP 和共享内存生成唯一的雪花。

dev-main 2023-06-03 08:13 UTC

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。