开源一个新的雪花漂移算法
yitter 人气:5功能特点:
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
加载全部内容