1.简介
分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种。
2.生成序列的结构图

1. 第一个部分: 1 个 bit:0,这个是无意义的。
2. 第二个部分: 41个 bit:是时间戳,即为当前的毫秒数。
3. 第三个部分: 10个 bit:机器的id。
4. 第四个部分:12 个 bit:序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号,一台机器一毫秒内生成序列号最大值为2的12次方(4096),超过此个数延迟到下一秒生成。
3.twitter的snowflake算法 – java实现
/**
* twitter的snowflake算法 -- java实现
*
* @author rock
* @date 2016/11/26
*/
public class SnowFlake {
/** 开始时间截 (2015-01-01) */
private final long twepoch = 1420041600000L;
/** 机器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;
/** 机器ID向左移12位 */
private final long workerIdShift = sequenceBits;
/** 数据标识id向左移17位(12+5) */
private final long datacenterIdShift = sequenceBits + workerIdBits;
/** 时间截向左移22位(5+5+12) */
private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;
/** 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) */
private final

本文深入解析Twitter的SnowFlake分布式ID生成算法,详细介绍其结构与工作原理,包括时间戳、机器ID和序列号等关键部分,并提供完整的Java实现代码。
1万+

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



