亲宝软件园·资讯

展开

开源一个新的雪花漂移算法

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

加载全部内容

相关教程
猜你喜欢
用户评论