MySQL数据库:源码解析之Seata项目中的分布式ID生成算法

三、源码解析

首先,需要定义ID组合方式所需的常量,如每段占用位数等

/* 开始时间 (2020-05-03) */
private final long twepoch = 1607529600000L;

/* 机器码所占的bit位数 = 10位 */
private final long workerIdBits = 10L;

/* 最大支持的机器码 = 1023,该式子相当与~(-1L << 10L) */ 
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);

/* 序列号所占的bit位数 */
private final long sequenceBits = 12L;

/* 机器码需要在序列号的左边 */
private final long workerIdShift = sequenceBits;

/* 时间戳的起始位置在序列号和机器码的左边 */
private final long timestampLeftShift = sequenceBits + workerIdBits;

/* 序列号的最大支持数值 */
private final long sequenceMask = -1L ^ (-1L << sequenceBits);

然后,定义三个位段的含义字段

/* 机器码 (0 ~ 1023) */
private long workerId;

/* 序列号 (0 ~ 4095) */
private long sequence = 0L;

/* 最后时间戳 */
private long lastTimestamp = -1L;

接下来,就是生产分布式ID的核心

  • 构建机器码,机器码和服务所在机器的ip地址有关,初
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值