分布式 ID 生成算法Snowflake原理

  • 什么是雪花算法Snowflake

    • twitter用scala语言编写的高效生成唯一ID的算法

    • 优点

      • 生成的ID不重复
      • 算法性能高
      • 基于时间戳,基本保证有序递增

  • 计算机的基础知识回顾

    • bit与byte

      • bit(位):电脑中存储的最小单位,可以存储二进制中的0或1
      • byte(字节):一个byte由8个bit组成
    • 常规64位系统里面java数据类型存储字节大小

      • int:4 个字节
      • short:2 个字节
      • long:8 个字节
      • byte:1 个字节
      • float:4 个字节
      • double:8 个字节
      • char:2 个字节
  • 雪花算法生成的数字,long类,所以就是8个byte,64bit

    • 表示的值 -9223372036854775808(-2的63次方) ~ 9223372036854775807(2的63次方-1)
    • 生成的唯一值用于数据库主键,不能是负数,所以值为0~9223372036854775807(2的63次方-1)

  

1、第一个bit位代表符号位,正数是0,复数是1,ID为正数,所以固定为0。
2、毫秒级时间戳部分占41bit,不是存储当前时间的时间戳,服务上线的时间毫秒级的时间戳(为当前时间-服务第一次上线的时间)。
3、工作机器id占10bit,可以支持2^10=1024个节点。
4、序列号部分占12bit,可允许同一毫秒生成2^12=4096个id,则理论上一秒就可生成4096*1000=400万个id。
5、组合起来刚好是64位,Long类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值