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

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

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

入门指南

1. 安装 Yitter.IdGenerator

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

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)。
示例
using System;
using Yitter.IdGenerator;

class Program
{
    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 必须唯一。

// 从环境变量或配置文件读取 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 类型里。

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

欢迎关注我的公众号Net分享

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏并分享给更多开发者!让我们一起学习,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值