功能特色:git
1.ID更短,是傳統算法的幾倍,用50年都不會超過js(Number)的最大值。算法
2.生成速度更快,0.1秒可生成50萬個。(i7筆記本)spa
3.支持時間回撥處理。code
4.支持手工插入新ID。blog
5.在算法漂移時,可拋出事件。事件
配置參數:get
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;
使用方法:generator
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();
全新算法,歡迎你們指正。it
開源地址:https://gitee.com/yitter/idgeneratorio