功能特點:
1.ID更短,是傳統算法的幾倍,用50年都不會超過js(Number)的最大值。
2.生成速度更快,0.1秒可生成50萬個。(i7筆記本)
3.支援時間回撥處理。
4.支援手工插入新ID。
5.在算法漂移時,可抛出事件。
配置參數:
1 public class IdGeneratorOptions
2 {
3 /// <summary>
4 /// 雪花計算方法
5 /// (1|2)
6 /// </summary>
7 public short Method { get; set; } = 1;
8
9 /// <summary>
10 /// 開始時間(UTC格式)
11 /// 不能超過目前系統時間
12 /// </summary>
13 public DateTime StartTime { get; set; } = DateTime.MinValue;
14
15 /// <summary>
16 /// 機器碼
17 /// 與 WorkerIdBitLength 有關系
18 /// </summary>
19 public ushort WorkerId { get; set; } = 0;
20
21 /// <summary>
22 /// 機器碼位長
23 /// 範圍:2-21(要求:序列數位長+機器碼位長不超過22)。
24 /// 建議範圍:6-12。
25 /// </summary>
26 public byte WorkerIdBitLength { get; set; } = 6;//10;
27
28 /// <summary>
29 /// 序列數位長
30 /// 範圍:2-21(要求:序列數位長+機器碼位長不超過22)。
31 /// 建議範圍:6-14。
32 /// </summary>
33 public byte SeqBitLength { get; set; } = 6;//10;
34
35 /// <summary>
36 /// 最大序列數(含)
37 /// (由SeqBitLength計算的最大值)
38 /// </summary>
39 public int MaxSeqNumber { get; set; } = 0;
40
41 /// <summary>
42 /// 最小序列數(含)
43 /// 預設11,不小于5,不大于MaxSeqNumber-2
44 /// </summary>
45 public ushort MinSeqNumber { get; set; } = 11;
46
47 /// <summary>
48 /// 最大漂移次數(含),
49 /// 預設2000,推薦範圍500-10000(與計算能力有關)
50 /// </summary>
51 public int TopOverCostCount { get; set; } = 2000;
使用方法:
var options1 = new IdGeneratorOptions()
{
Method = 1,
StartTime = DateTime.Now.AddYears(-1),
//TopOverCostCount = 1000,
WorkerIdBitLength = 6,
SeqBitLength = 6,
//MinSeqNumber = 11,
//MaxSeqNumber = 200,
};
var IdGen = new YitIdGenerator(options1);
IdGen.NewLong();
全新算法,歡迎大家指正。
開源位址:https://gitee.com/yitter/idgenerator