雪花算法(Snowflake)是一种生成唯一ID的算法,它由Twitter公司开发并开源。它主要的应用场景是在分布式系统中生成唯一ID,以保证数据的一致性和可追溯性。
雪花算法的核心思想是将一个64位的整数ID分为5个部分:
- 第一个部分是符号位,占据1位,不可用,因为long类型的符号位始终为0。
- 第二个部分是时间戳,占据41位,可以精确到毫秒级别,可以使用69年,从1970年1月1日开始计算。
- 第三个部分是工作机器id,占据10位,用于标识不同的工作机器。因此,分布式系统中的不同机器必须有不同的机器id。
- 第四个部分是序列号,占据12位,可以生成的序列号最大值为4095,如果在同一个毫秒内生成了超过4095个ID,就会等待下一个毫秒,序列号重新从0开始计数。
- 最后一个部分是机房id,占据10位,用于标识不同的机房。
使用Java语言实现雪花算法可以分为以下步骤:
1.定义一个Snowflake类:
public class Snowflake {
private static final long START_TIME = 1577808000000L; //2020-01-01
private static final long MACHINE_ID_BITS = 10L;
private static final long DATACENTER_ID_BITS = 10L;
private static final long MAX_MACHINE_ID = ~(-1L << MACHINE_ID_BITS);
private static final long MAX_DATACENTER_ID = ~(-1L << DATACENTER_ID_BITS);
private static final long SEQUENCE_BITS = 12L;
private static final long MACHINE_ID_SHIFT = SEQUENCE_BITS;
2688



被折叠的 条评论
为什么被折叠?



