雪花算法Snowflake
Snowflake ,雪花算法是由Twitter开源的分布式ID生成算法 ,以划分命名空间的方式将 64-bit位分割成多个部分 ,每个部分代表不同的含义。而 Java中64bit的整数是Long类型, 所以在 Java 中 SnowFlake 算法生成的 ID 就是 long 来存储的。
位运算异或( ^ ) ,左移( < < ) ,与( & ) ,或( | )
第1位: 占用1bit ,第一位为符号位 ,不使用。
第1部分:41位的时间戳 ,41-bit位可表示2^41个数 ,每个数代表毫秒 ,那么雪花算法可 用的时间年限是(2^41)/(1000*60 * 60 * 24 * 365) =69 年的时间。
第2部分: 10-bit位可表示机器数 ,即2^10 = 1024台机器 ,通常不会部署这么多台机器, (细分两部分5-bit (数据) , 5-bit(2^5) =32台机器) 也可划分多个部分,
第3部分: 12-bit位是自增序列 ,可表示2^12 = 4096个数。觉得一毫秒个数不够用也可以 调大点
41位时间戳是固定的 ,时间戳转二进制的长度是41位 ,后面两个部分都可以灵活调正 ,只要注意后面位运算的位数就行.
还没有评论,来说两句吧...