@akashrajpurohit/雪花-id
一个简单而轻量级的Node.js库来生成独特的雪花ID.
@akashrajpurohit/snowflake-id 是用于生成适合用作分布式系统中主密钥的独特和分布式ID的节点.js库.
它生成64位的ID(以字符串格式),由时间戳,工人ID和序列号组成. 这些身份证基于 推特上的"雪花"标识 生成算法.
详细阅读 雪花身份证是什么
安装
您可以安装 @akashrajpurohit/snowflake-id 使用pnpm/npm/yarn:
pnpm add @akashrajpurohit/snowflake-id
# OR
npm install @akashrajpurohit/snowflake-id
# OR
yarn add @akashrajpurohit/snowflake-id
使用量 +++
这里有一个如何使用的例子 @akashrajpurohit/snowflake-id数字 :
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';
const snowflake = SnowflakeId({
workerId: 1,
epoch: 1597017600000,
});
console.log(snowflake.generate()); // 14755887168818983731200
这将以字符串格式生成一个独特的ID.
配置选项 QQ
SnowflakeId 构造器选择一个具有以下属性的选项对象:
-
workerId(可选):生成雪花ID的工人身份.如果未指定, 默认为 0 .
-
epoch(可选):一个以毫秒表示的时间戳代表ID生成的开始.默认为2020年8月10日00:00 UTC未指明的.
方法学
SnowflakeId的例子有以下方法: 雪花Id:
generate():以字符串格式生成一个独特的ID.
处理出错 {}
SnowflakeId的例子可以抛出两个错误:
-
Invalid Epoch Error: SnowflakeId 实例如果时标无效,即如果时标大于当前时标,则丢出一个错误. -
Clock Backwards Error: SnowflakeId 实例如果时钟向后移动,即如果当前时间戳小于上一个时间戳,则会抛出一个错误.
实例
以下是如何生成10个ID的例子:
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';
const snowflake = SnowflakeId();
for (let i = 0; i < 10; i++) {
console.log(snowflake.generate());
}
以下是如何使用不同的工人身份证生成身份证的例子:
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';
const worker1 = SnowflakeId({ workerId: 1 });
const worker2 = SnowflakeId({ workerId: 2 });
console.log(worker1.generate()); // Generates an ID with worker ID 1
console.log(worker2.generate()); // Generates an ID with worker ID 2
在分布式系统中使用时,强烈建议您设置一个独特的 workerId 以减少IDS相撞.
虽然执行的细节取决于你, 但一个简单的方式设置 一个可能的独有 workerId 将使用 process.pid。 。 。 .
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';
const workerId = process.pid % 1024; // Using PID as workerId
const snowflake = SnowflakeId({ workerId });
const id = snowflake.generate(); // Generate a new Snowflake ID
console.log(id);
页:1
-
这个
workerId参数可以省略,在这种情况下workerId将设定为 0。 然而,如果期望在多台机器上生成ID,建议设定特定的工人ID值来降低ID相撞的可能性. -
时间戳应尽可能接近当前时间,以最大限度地延长发电机的使用寿命。 如果这个时代在以往或未来设定得太远,生成者可能无法为生成者的全部寿命生成ID.
学多点
时间戳被用作生成唯一ID的起点. 如果时间戳在过去或将来设置得太远,可以限制发电机的寿命. 这是因为生成的ID的时间戳部分与ID中的总位数相比一般是比特数较少的,因此可以比其他部分更快地达到时间戳部分的最大值.
例如,如果将时标设定为1970年1月1日,即Unix时标,且发电机被配置为用41位来表示时标部分,则时标部分的最大值将在2088年达到. 这意味着在2088年后,生成器将不再能够生成独特的ID.
因此,重要的是将时代时间戳设置在尽可能接近当前时间的地方,以最大限度地延长发电机的寿命. 这将确保生成的ID中的时间戳部分不会过快地达到其最大值,使生成者能够在更长的时间内继续生成独特的ID.
错误或请求 {}
如果你遇到任何问题,可以随意打开 问题。如果你觉得项目缺少一个功能,请提出 车票 我会调查的 也欢迎拉出请求.