ada-u / chocoflake
64位基于时间的ID生成器
v1.0.0
2021-07-15 07:24 UTC
Requires
- php: >=8.0
- ext-sysvsem: *
- ext-sysvshm: *
- mockery/mockery: 1.4.*
- predis/predis: 1.1.*
Requires (Dev)
- fabpot/php-cs-fixer: dev-master
- phpunit/phpunit: ^9
- dev-master
- v1.0.0
- 0.0.1
- dev-dependabot/composer/mockery/mockery-1.4.staror-1.5.staror-1.6.star
- dev-dependabot/composer/predis/predis-1.1.staror-2.0.staror-2.1.staror-2.2.star
- dev-snyk-fix-3127708a5ad80c8c5fe3b75ffc58c19d
- dev-snyk-fix-898b46e52f567fd13fb6f8745ce31be4
- dev-snyk-fix-12b472db04f6a9332be5a41ab725c484
- dev-snyk-fix-dfd8d7eab8ce5c3129b219f51a773a85
- dev-snyk-fix-d5a0fa2ba33377fce539d26ca5d37b52
- dev-snyk-fix-c90f263ba6fee85467bcfcb05377dabb
- dev-snyk-fix-4983e12bd6f2b08e162aaa977df53a6d
- dev-snyk-fix-6ef0402b16092a7a77aa5aec0359df85
- dev-snyk-fix-550b6a09a951581c428f8f31621ca32d
- dev-snyk-fix-19ecf7eb222c691ffb1d62874782b64f
- dev-snyk-fix-7a004071dba145b80c19f4ec9337bb26
- dev-snyk-fix-551c8f88d8256c5291bb7e96858619fb
- dev-snyk-fix-1ea051b75343ddbe2f0235d2efdae40b
- dev-snyk-fix-da14a42eb1c0eff574e6bbe184af8d3b
- dev-snyk-fix-7e6875ac564ee3152e85a15912aef44b
- dev-snyk-fix-972c0a1aee84f9361efbba46544f65b3
This package is auto-updated.
Last update: 2024-09-08 13:32:53 UTC
README
PHP的64位ID生成器
chocoflake
是Twitter Snowflake算法的实现。在分布式环境中,它可以根据时间生成ID。
使用方法
先决条件
- PHP 8.0 或更高版本
安装
命令
$ composer.phar require ada-u/chocoflake:dev-master
composer.json
{ "require": { "ada-u/chocoflake": "dev-master" } }
$ composer.phar install
示例
配置
- 41位 - 用于时间戳
- 5位 - 用于区域ID
- 5位 - 用于服务器ID
- 12位 - 用于每毫秒的序列
- 1414334507356 - 服务启动纪元(Unix时间戳)
$config = new IdConfig(41, 5, 5, 12, 1414334507356); $service = new ChocoflakeService($config); $worker = $service->createIdWorkerOnSharedMemory(new RegionId(1), new ServerId(1)); $id = $worker->generate(); 4194439168
ID生成器
我实现了两种ID生成器,Redis和共享内存版本。
共享内存版本
使用共享内存和信号量(作为互斥锁)来防止多个进程同时处于关键部分。
Redis版本
使用Redis原子增量操作来计数序列。
ID规范
ID由四个元素组成
- 时间戳
- 区域ID
- 服务器ID
- 序列
您可以指定每个元素的任何位长度。
测试
$ docker-compose run php vendor/bin/phpunit
Creating chocoflake_php_run ... done
PHPUnit 9.5.6 by Sebastian Bergmann and contributors.
.... 4 / 4 (100%)
Time: 00:00.353, Memory: 6.00 MB
OK (4 tests, 4 assertions)
许可协议
本软件按照MIT许可证发布,请参阅LICENSE。