当前位置: 首页 > news >正文

雪花算法详解

雪花算法

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的序号来区分开来。


http://www.mrgr.cn/news/79690.html

相关文章:

  • 如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制
  • TensorFlow深度学习实战(1)——神经网络与模型训练过程详解
  • 今天你学C++了吗?——C++中的类与对象(日期类的实现)——实践与知识的碰撞❤
  • 【Flux.jl】 卷积神经网络
  • MySQL常用运维操作(二):grant赋权语句
  • 软件工程 概述
  • 正则表达式的高级方法
  • STL之空间配置器allocator
  • 正则化:机器学习中的泛化利器
  • webrtc-java:引领Java进入实时通信新时代
  • 线上常见问题案例及排查工具
  • DevOps持续集成
  • STM32-C语言基础知识
  • 力扣HOT 100(图)
  • 多人聊天室 NIO模型实现
  • 1.1.Flink的项目初始化和Hello-world
  • 在Ubuntu22.04 jammy下用qemu模型riscv32环境装鸿蒙(未完成,待续)
  • PDF处理的创新工具:福昕低代码平台尝鲜
  • leecode中的面试100题
  • 【推荐算法】单目标精排模型——DIN
  • 阿里云ack部署rabbitmq集群
  • 【sgUploadList】自定义组件:基于elementUI的el-upload封装的上传列表组件,适用于上传附件时
  • 第4章:颜色和背景 --[CSS零基础入门]
  • unity中的UI介绍
  • 外包干了5天,技术明显退步。。。。。
  • 《蓝桥杯比赛规划》