C# 使用IdGen產生Id(雪花算法)
November 12, 2024
雪花算法
概述
雪花算法是 Twitter 開源的生成分散式全域產生 ID 的演算法
格式
雪花 ID 有 64 位元
- 1 位為符號位始終是 0
- 41 位為時間戳,精度毫秒
- 10 位可為(10 位機器 ID) 或 (5 位數據中心 ID + 5 位機器 ID),可識別 1024 台機器
- 12 位為序列號 => 代表每毫秒可以有 4096 個 ID

優缺點
優點
- ID 包含時間戳,有序可排序
- 簡單速度快
缺點
- 依賴系統時間,如果系統時間回退或跳躍,會產生不唯一 ID
- 自己手動分配機器 ID,分配不當,產生不唯一 ID
Nuget
dotnet add package IdGen
DI注入(可選)
dotnet add package IdGen.DependencyInjection
Usage
一般
var generator = new IdGenerator(0); var id = generator.CreateId();
依賴注入
Program.cs
builder.Services.AddIdGen(0);
Example.cs
public class Example { //private readonly IIdGenerator<long> idGenerator; //public Example (IIdGenerator<long> idGenerator) //{ // this.idGenerator = idGenerator; //} private readonly IdGenerator idGenerator; public Example(IdGenerator idGenerator) { this.idGenerator = idGenerator; } public long GetId() { var id = idGenerator.CreateId(); return id; } }