想天/wantp/snowflake

一个用于通过雪花算法创建唯一ID的包

v1.2.0 2019-08-05 07:14 UTC

This package is auto-updated.

Last update: 2024-09-19 13:18:57 UTC


README

Twitter雪花算法snowflake的PHP实现,解决并发可能造成ID重复的问题

概述

  • 雪花算法生成的19个字符长度的唯一数字ID
  • 由于php-fpm多进程的特性,在并发下可能造成ID重复,提供redis和文件锁两种方式来控制并发下的ID重复,默认使用文件锁形式
  • 生成的ID基于时间趋势增长
  • 支持生成时间到2080-09-05
  • 支持32个数据中心,32台机器
  • 每毫秒内可以生成4096个不同ID

雪花算法简述

使用64位来标识一个唯一ID,生成规则

1位正负标识位 - 41位毫秒级时间戳 - 5位数据中心ID - 5位机器ID - 12位毫秒内顺序ID

使用说明
引用包
composer require wantp/snowflake
生成ID
require_once 'vendor/autoload.php';

$IdWorker = \wantp\Snowflake\IdWorker::getIns();
$id = $IdWorker->id();

反向解析ID
$idInfo = $IdWorker->parse($id);
分布式,设置机器ID
$dataCenterId = 2;
$machineId = 5;
$IdWorker = \wantp\Snowflake\IdWorker::getIns($dataCenterId,$machineId);
$id = $IdWorker->id();
使用redis来控制并发
  • 需要先安装配置好redis,设置redis时需要填写redis配置
  • redis配置说明
$resdisConfig = ['host'=>'redis host','port'=>'redis port','dbIndex'=>'redis dbIndex',auth'=>'redis auth'];
$IdWorker = \wantp\Snowflake\IdWorker::getIns()->setRedisConutServer($resdisConfig);
$id = $IdWorker->id();