雪花算法详解

雪花算法

SnowFlake 分布式ID生成算法

核心思想:使用一个64bit的long类型的数字作为全局唯一ID。在分布式系统中的应用十分广泛,且ID引入了时间戳,基本上保持自增。

在这64bit中,其中1个bit是不用的,然后用其中的41bit作为毫秒数,用10bit作为工作机器ID,12bit作为序列号

0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 1 1001 | 000 00000000

  • 第一部分为1个bit :0 这个无意义。

  • 第二部分41bit:代表时间戳

  • 第三部分5bit:表示机房ID,10001。

  • 第四部分 5bit:标识机器ID,1 1001

  • 第五部分12个bit:表示的序号,就是某个机房某台机器上这一毫秒同时生成的id的序列号,0000 00000000。

1bit不用是为什么

在二机制中第一位是1 则代表负数,但是我们生成的id都是正数,所以第一个bit统一为0

41bit:表示的是时间戳。单位是毫秒

41bit可以表达的数字多达2^41-1, 也就是可以表示2^41-1个毫秒值,换算成年就是69年时间。

10bit:记录工作机器ID

代表的是这个服务最多可以部署在2^10 台机器上,但是10bit中5个bit代表机房,5个bit代表机器ID。最多代表2^5^个机房,2^5^个服务器。

12bit:这个是用来记录同一毫秒内产生的不同ID

12bit可以代表的最大正整数为2^12^-1=4095,也就是可以用12个bit代表的数字区分同一毫秒内的4096个不同的ID

此算法可以保证,一个机房的一台机器上,在同一毫秒内生成了一个唯一的ID。可能一个毫秒内会生成多个ID,但是有最后12个bit的序号来区分开来。

相关推荐
廋到被风吹走2 分钟前
【Spring】ThreadLocal详解 线程隔离的魔法与陷阱
java·spring·wpf
星辰离彬2 分钟前
2025 IDEA运行报错:运行 xxxxApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。
java·后端·intellij-idea·jar
古城小栈5 分钟前
Java 响应式编程:Spring WebFlux+Reactor 实战
java·开发语言·spring
攻心的子乐6 分钟前
sentinel使用指南 限流/熔断 微服务 ruoyi-cloud使用了
java·开发语言
zsyy@8 分钟前
Maven本地仓库有jar还会向远程仓库下载依赖的问题
java·服务器·maven
小万是个程序员14 分钟前
IDEA 配置热部署(使用idea自带功能,无需插件)
java·ide·intellij-idea
柒.梧.15 分钟前
Java核心面试题终极总结:从基础到进阶,覆盖高频考
java·开发语言·面试
计算机毕设指导615 分钟前
基于微信小程序的个性化服装搭配推荐系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
星环处相逢17 分钟前
Docker资源限制全解析:CPU、内存、磁盘IO管控与实操指南
java·开发语言
苹果醋317 分钟前
24.记录Vue项目iview组件日期获取时间少一天
java·运维·spring boot·mysql·nginx