artnum/snowflake53

生成独特的53位雪花ID

v1.0.2 2024-04-26 13:00 UTC

This package is auto-updated.

Last update: 2024-09-26 13:56:00 UTC


README

一个生成53位雪花ID的特质,以适应js Number.MAX_SAFE_INTEGER。序列计数使用共享内存完成,机器ID来自环境变量或参数。也可以生成64位雪花ID。

它不需要任何外部基础设施(如Memcached或Redis等)来保持序列计数,因为它通过共享内存完成,并使用信号量进行锁定。所以其他进程也可以访问序列计数:)

安装

通过composer

$ composer require artnum/snowflake53

用法

require_once 'vendor/autoload.php';

use Snowflake53\ID;

class IDGen {
    use ID;
}

$gen = new IDGen();
echo $gen->get53() . PHP_EOL;
echo $gen->get64() . PHP_EOL;

所有函数都声明为静态的,所以可以不通过类实例来使用。

require_once 'vendor/autoload.php';

use Snowflake53\ID;

class IDGen {
    use ID;
}

echo IDGen::get53() . PHP_EOL;
echo IDGen::get64() . PHP_EOL;

如果您选择,可以通过调用destroySHM来销毁共享内存段和信号量。

require_once 'vendor/autoload.php';

use Snowflake53\ID;

class IDGen {
    use ID;
}

IDGen::destroySHM(); 

共享内存路径

共享内存使用文件路径作为标识。默认情况下是__FILE__。但如果您在服务器的多个不同位置使用它,但仍希望所有ID都按顺序排列,可以将公共静态变量$SHMPath设置为所需的路径。该文件必须存在。

require_once 'src/Snowflake53.php';

use Snowflake53\ID;

class IDGen {
    use ID;
}

IDGen::$SHMPath = '/tmp/snowflake53';
echo IDGen::get53() . PHP_EOL;
echo IDGen::get64() . PHP_EOL;


$gen = new IDGen();
$gen::$SHMPath = '/tmp/snowflake53';
echo $gen->get53() . PHP_EOL;
echo $gen->get64() . PHP_EOL;

机器ID

机器ID可以作为get53get64的参数传递。如果不传递,它将尝试从环境变量SNOWFLAK53_MACHINE_IDSNOWFLAKE64_MACHINE_IDSNOWFLAKE_MACHINE_ID中获取ID。获取53位ID时,将首先查看SNOWFLAK53_MACHINE_ID,然后是SNOWFLAKE_MACHINE_ID;获取64位ID时,情况相反(首先查看SNOWFLAKE64_MACHINE_ID,然后是SNOWFLAKE_MACHINE_ID)。

背后的想法是,您为64位和53位设置唯一的机器,因此您使用SNOWFLAKE_MACHINE_ID,或者您为53位或64位设置不同的机器ID,因此您设置SNOWFLAKE53_MACHINE_IDSNOWFLAKE64_MACHINE_ID

许可证

MIT许可证下。

开发者