-
什么是雪花算法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类型。