首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Yitter.IdGenerator:C# 中的高性能唯一 ID 生成方案

Yitter.IdGenerator:C# 中的高性能唯一 ID 生成方案

作者头像
郑子铭
发布2025-08-09 11:19:03
发布2025-08-09 11:19:03
21200
代码可运行
举报
运行总次数:0
代码可运行

Yitter.IdGenerator 是一个基于优化雪花算法的高性能分布式唯一 ID 生成器。支持 C# 等多种语言,适合高并发场景。可以在 0.1 秒内生成 50 万个 ID。它也支持容器化环境和时间回拨处理。

入门指南

1. 安装 Yitter.IdGenerator

在 C# 项目中通过 NuGet 包管理器安装 Yitter.IdGenerator

代码语言:javascript
代码运行次数:0
运行
复制
dotnet add package Yitter.IdGenerator --version 1.0.14

2. 配置和初始化

Yitter.IdGenerator 需要在应用启动时进行全局初始化。要设置 WorkerId 和其他参数。初始化只需执行一次。通常放在程序入口处,如 Program.csStartup.cs

基本配置

IdGeneratorOptions 用于配置 ID 生成器的参数。比如 WorkerId、时间戳位数、序列号位数等。

常见配置项有:

  • WorkerId:机器或进程的唯一标识(默认 6 位,最大 63)。
  • WorkerIdBitLength:WorkerId 的位数。
  • SeqBitLength:序列号的位数,影响每毫秒生成 ID 的数量。
  • BaseTime:时间戳基准(默认 1970-01-01)。
示例
代码语言:javascript
代码运行次数:0
运行
复制
using System;
using Yitter.IdGenerator;

classProgram
{
    static void Main(string[] args)
    {
        // 第一步:全局初始化(只需执行一次)
        var options = new IdGeneratorOptions
        {
            WorkerId = 1,              // 机器ID,必须唯一(0-63)
            WorkerIdBitLength = 6,     // WorkerId 位数,默认 6 位
            SeqBitLength = 6,          // 序列号位数,默认 6 位
            BaseTime = 637680000000,   // 基准时间(毫秒,1970-01-01 = 0)
            Method = 1                 // 算法类型,1 为漂移算法
        };

        // 设置 ID 生成器
        YitIdHelper.SetIdGenerator(options);

        // 第二步:生成唯一 ID
        long newId = YitIdHelper.NextId();
        Console.WriteLine($"Generated ID: {newId}");

        // 生成多个 ID 示例
        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine($"ID {i + 1}: {YitIdHelper.NextId()}");
        }
    }
}

3. 分布式环境中的 WorkerId 分配

在分布式系统中,WorkerId 必须唯一。

代码语言:javascript
代码运行次数:0
运行
复制
// 从环境变量或配置文件读取 WorkerId
ushort workerId = ushort.Parse(Environment.GetEnvironmentVariable("WORKER_ID") ?? "1");
var options = new IdGeneratorOptions
{
    WorkerId = workerId,
    WorkerIdBitLength = 6,
    SeqBitLength = 6
};
YitIdHelper.SetIdGenerator(options);

4. 生成 ID 和使用

初始化之后,调用 YitIdHelper.NextId() 就可以生成唯一 ID。生成的 ID 是 64 位整数,适合保存在 long 类型里。

代码语言:javascript
代码运行次数:0
运行
复制
using System;
using Yitter.IdGenerator;

        // 初始化
        var options = new IdGeneratorOptions { WorkerId = 1 };
        YitIdHelper.SetIdGenerator(options);

        // 生成 ID
        long id = YitIdHelper.NextId();
        Console.WriteLine($"Generated ID: {id}");

5. 进阶使用

批量生成 ID

代码语言:javascript
代码运行次数:0
运行
复制
for (int i = 0; i < 1000; i++)
{
    Console.WriteLine(YitIdHelper.NextId());
}

多线程安全:Yitter.IdGenerator 是线程安全的。可以直接在多线程环境中调用 NextId

自定义算法:通过 Method 参数选择不同的 ID 生成算法。建议使用漂移算法,Method = 1

参考资源

  • 官方 GitHub 仓库:https://github.com/yitter/IdGenerator
  • NuGet 包:https://www.nuget.org/packages/Yitter.IdGenerator

·············· END ··············

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 入门指南
    • 1. 安装 Yitter.IdGenerator
    • 2. 配置和初始化
      • 基本配置
      • 示例
    • 3. 分布式环境中的 WorkerId 分配
    • 4. 生成 ID 和使用
    • 5. 进阶使用
    • 参考资源
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档