@akashrajpurohit/snowflake-id

中文文档
2.0.0发布于 2023/10/31MITTypeScriptESM + CJS零依赖近 30 天下载 1.2万

一个简单而轻量级的Node.js库来生成独特的雪花ID.

中文使用文档
文档目录10 节
  1. 一个简单而轻量级的Node.js库来生成独特的雪花ID.
  2. 安装
  3. 使用量 +++
  4. 配置选项 QQ
  5. 方法学
  6. 处理出错 {}
  7. 实例
  8. 页:1
  9. 错误或请求 {}
  10. 哪里可以找到我吗

@akashrajpurohit/雪花-id

一个简单而轻量级的Node.js库来生成独特的雪花ID.


Build states npm latest version npm bundle size Visitors count Coverage NPM license follow on twitter

错误报告 • 妇女 特性请求



@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.

错误或请求 {}

如果你遇到任何问题,可以随意打开 问题。如果你觉得项目缺少一个功能,请提出 车票 我会调查的 也欢迎拉出请求.

哪里可以找到我吗

Website Badge Twitter Badge Linkedin Badge Instagram Badge Telegram Badge

版本与发布记录

@akashrajpurohit/snowflake-id 共发布 12 个版本,首次发布于 2023/05/13;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.0latest2023/10/313 年前
1.5.12023/08/123 年前
1.5.02023/08/123 年前
1.4.32023/07/093 年前
1.4.22023/06/163 年前
1.4.12023/05/203 年前

关于 @akashrajpurohit/snowflake-id 的常见问题

@akashrajpurohit/snowflake-id 是什么?

一个简单而轻量级的Node.js库来生成独特的雪花ID.

如何安装 @akashrajpurohit/snowflake-id?

在项目目录运行 npm install @akashrajpurohit/snowflake-id,或使用 pnpm add / yarn add / bun add。

@akashrajpurohit/snowflake-id 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@akashrajpurohit/snowflake-id 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@akashrajpurohit/snowflake-id 可以商用吗?

@akashrajpurohit/snowflake-id 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@akashrajpurohit/snowflake-id 的下载量有多少?

根据 npm 官方下载统计,@akashrajpurohit/snowflake-id 在 2026/10/06 – 2026/11/04 这 30 天内被下载 11,871 次,日均约 396 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@akashrajpurohit/snowflake-id 还在维护吗?

最新版本 2.0.0 发布于 2023/10/31(3 年前);至今共发布 12 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/05/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。