micoya/php-snowflake-shm

Generate unique snowflake using PHP and shared memory.

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 6

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/micoya/php-snowflake-shm

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

This package is auto-updated.

Last update: 2025-12-31 00:23:52 UTC


README

Generate unique snowflake using PHP and shared memory. Maybe it is the fastest resolution.

It requires shmop and sysvsem, so you can't run it on Windows OS.

Performance

  • 13us per op (WSL2)
  • 7us per op (Linux)

Install

composer require micoya/php-snowflake-shm

Examples

Simple Use

/**
 * 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();

Custom machine-id length or time

$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();

Custom machine-id format helper

If you want to customize the composition of your machine id, for example, if you need to distinguish between machine and worker, here is a simple tool to use.

// 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();

About Unit-Test

Due to some environmental reasons, I didn't use PHPUnit and instead wrote a simple script, Check simple_test.php.