zzbajie/yii2-snowflake

yii2-snowflake

安装次数: 0

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:yii2-extension

dev-master 2022-04-01 16:12 UTC

This package is auto-updated.

Last update: 2024-09-30 01:16:33 UTC


README

yii2-snowflake

安装

安装此扩展的最佳方式是通过composer

运行以下命令之一:

php composer.phar require --prefer-dist zzbajie/yii2-snowflake "*"

或者添加以下内容到您的composer.json文件的require部分:

"zzbajie/yii2-snowflake": "*"

使用方法

扩展安装完成后,只需在代码中通过以下方式使用它:

//生成订单号
$redis = Yii::$app->redis;
$redis->select(9);
$snowflake = new Snowflake($redis, Yii::$app->params['snowFlake']['machineId'], Yii::$app->params['snowFlake']['startTime'], 'order');
return (string)$snowflake->generate();

snowflake

该版本使用了PHP7语法,并使用REDIS作为锁机制

算法介绍

snowflake是一种分布式ID生成器,由Twitter出品,通过添加时间戳相对值、数据标志、机器标志和递增序列号,确保ID的有序性和唯一性。

符号位(1bit)- 时间戳相对值(41bit)- 数据标志(5bit)- 机器标志(5bit)- 递增序号(12bit) 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

版本概述

  • 本版将数据标识和机器标识合并为机器标识。即:10bit,0-1023
  • 本版使用REDIS确保单位毫秒内ID自增并防止并发重复

其他补充

  • ID长度:
    • 标准算法ID长度为18或19位。当时间差超过约7.5年时,就会达到19位
  • 机器标识:
    • 机器标识可以写入php-fpm.conf文件中。例如:env[MACHINE_ID]=10。修改完成后并重启php-fpm后,可以在项目中通过getenv('MACHINE_ID')获取机器标识