自然界不存在两片完全一样的雪花,每一片都是独一无二的,雪花算法的命名由此而来,所有雪花算法表示生成的ID唯一,且生成的ID是按照一定的结构组成。

组成结构

  SnowFlake雪花算法

   上图可以看到雪花算法的结构由四部分组成,首位无效符,所以我们主要看后面三部分

    1. 第一部分:由41位的时间戳组成,可以提高查询速度。
    2. 第二部分:由10位机器码组成,适用于分布式环境下各节点进行标记,10位的长度最多支持部署1024个节点。
    3. 第三部分:由12位序列号组成,可以同一节点同一毫秒生成多个2^12 - 1(4095)个ID序号。

 

由于生成的id按时间戳生成,所以ID是按时间递增

分布式系统内不会产生重复ID

 

使用

  环境: .Net Core 3.0

  先NuGet一下SnowFlake,这里使用的是Snowflake.Core

   SnowFlake雪花算法

 

   下面是实例Demo

private static List<string> list = new List<string>();
static void Main(string[] args)
{
    Snowflake.Core.IdWorker work = new Snowflake.Core.IdWorker(1, 1);
    for (int i = 0; i < 1000; i++)
    {
        var id = work.NextId();
        if (list.Contains(id.ToString()))
        {
            Console.WriteLine("存在");
        }
        else
        {
            list.Add(id.ToString());
            Console.WriteLine(id.ToString());
         }
    }
}
Code

相关文章: