Skip to content

jokechat/snowflake

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

由图我们可以看出来,snowFlake ID结构是一个64bit的int型数据。

第1位bit

在二进制中最高位为1,表示的是负数,因为我们使用的id应该都是整数,所以这里最高位应该是0。

41bit时间戳

41位可以表示2^41-1个数字,如果只用来表示正整数,可以表示的数值范围是:0 - (2^41 -1),这里减去1的原因就是因为数值范围是从0开始计算的,而不是从1开始的。

这里的单位是毫秒,所以41位就可以表示2^41-1个毫秒值,这样转化成单位年则是(2^41-1)/(1000 * 60 * 60 * 24 * 365) = 69

10bit-工作机器id

这里是用来记录工作机器的id。2^10=1024表示当前规则允许分布式最大节点数为1024个节点。这里包括5位的workerID和5位的dataCenterID,这里其实可以不区分,但我下面的代码进行了区分。

12bit-序列号

用来记录同毫秒内产生的不同id。12bit可以表示的最大正整数是2^12-1=4095,即可以用0,1,2,3,......4094这4095个数字,表示同一机器同一时间戳(毫秒)内产生的4095个ID序号。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages