自然界不存在两片完全一样的雪花,每一片都是独一无二的,雪花算法的命名由此而来,所有雪花算法表示生成的ID唯一,且生成的ID是按照一定的结构组成。
组成结构
上图可以看到雪花算法的结构由四部分组成,首位无效符,所以我们主要看后面三部分
-
- 第一部分:由41位的时间戳组成,可以提高查询速度。
- 第二部分:由10位机器码组成,适用于分布式环境下各节点进行标记,10位的长度最多支持部署1024个节点。
- 第三部分:由12位序列号组成,可以同一节点同一毫秒生成多个2^12 - 1(4095)个ID序号。
由于生成的id按时间戳生成,所以ID是按时间递增
分布式系统内不会产生重复ID
使用
环境: .Net Core 3.0
先NuGet一下SnowFlake,这里使用的是Snowflake.Core
下面是实例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()); } } }