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.cs
或 Startup.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分享
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏并分享给更多开发者!让我们一起学习,共同进步!