tengzbiao / php-snowflake
A package for create unique id by snowflake
dev-master
2020-03-01 08:00 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-09-11 21:32:55 UTC
README
Twitter雪花算法PHP版本
生成规则
64位标识唯一ID
第一位0 - 41位毫秒级时间戳 - 2位数据中心ID - 6位机器ID - 2位扩展位 - 12位毫秒内顺序ID
概述
- php-fpm多进程并发导致ID重复,使用基于信号量代替文件锁和redis锁
- ID趋势递增
- 支持4个数据中心、64台机器
- 每毫秒最多可生成4096个ID
使用
- 安装sysvsem和sysvshm扩展(以php-7.1.13版本为例)
# cd php-7.1.13/ext/sysvsem
# phpize
# configure
# make && make install
# cd php-7.1.13/ext/sysvshm
# phpize
# configure
# make && make install
在php.ini增加、然后重启php-fpm
extension=sysvsem.so
extension=sysvshm.so
- composer require tengzbiao/php-snowflake
<?php
use tengzbiao\Snowflake;
$dataCenter = 1;
$workerID = 1;
$epoch = strtotime('2019-12-01') * 1000; // 初始化开始时间, 一经设置不能更改。
$idWorker = IDWorker::getInstance($dataCenter, $workerID, $epoch);
echo $idWorker->id();