雪花算法
雪花算法是Twitter推出的⼀个⽤于⽣成分布式ID的策略。
雪花算法⽣成的ID是⼀个long型,那么在Java中⼀个long
型是8个字节,算下来是64bit。
1.符号位:固定为0(0为正数,1位负数)
2.时间戳:单位为毫秒(2的41次方毫秒 约等于70年)
3.机器id:长度为10个字节(前五位为机房id,后五位是机器id,最多支持32*32 = 1024个机器)
4.序列:自增,长度为12个字节(最多支持4096个序列)
也就是说雪花算法最多同时支持1024个机器七十年,每个机器每毫秒生成4096个雪花id不重复
下面就是紧张又刺激的代码环节
public class SnowflakeIdWorker {
// ==============================Fields===========================================
/** 开始时间截 (2020-03-26) */
private final long twepoch = 1585183384185L;
/** 机器id所占的位数 */
private final long workerIdBits = 5L;
/** 数据标识id所占的位数 */
private final long dataCenterIdBits = 5L;
/** 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) */
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
/** 支持的最大数据标识id,结果是31 */
private final long maxDataCenterId = -1L ^ (-1L << dataCenterIdBits);
/** 序列在id中占的位数 */
private final long sequenceBits = 12L