天天看點

開源一個新的雪花漂移算法

功能特點:

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