雪花算法实现

该博客详细介绍了雪花算法的原理,包括41位时间戳、10位工作节点ID(5位数据中心ID + 5位机器ID)以及12位序列号。文章还涵盖了如何引入依赖、配置SnowflakeManager、注册以及测试步骤,为读者提供了完整的雪花算法实现指南。
摘要由CSDN通过智能技术生成

原理

在这里插入图片描述

分别有三部分(其中第一位保留位,暂时没用):

第一部分:时间戳(毫秒级),这里为41bit
第二部分:工作机器id,一般为==5bit数据中心id(datacenterId)+5bit机器id(workerId)==组成,10位的长度最多支持部署1024个节点
第三部分:在相同毫秒内,可以产生2^12 个id,12位的计数顺序号支持每个节点每毫秒产生4096个ID序列

引入依赖


<dependency>
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 雪花算法是一种生成分布式唯一 ID 的算法。它通常用于生成数据库主键或者其他全局唯一的 ID。 Java 雪花算法实现通常是将当前时间戳、机器 ID 和序列号组合起来生成一个 64 位的整数,其中时间戳占用 41 位,机器 ID 占用 10 位,序列号占用 12 位。 下面是一个简单的 Java 雪花算法实现代码: ```java public class SnowflakeIdGenerator { // 起始时间戳,用于用当前时间戳减去这个时间戳,算出偏移量 private final static long START_TIMESTAMP = 1577808000000L; // 机器 ID 所占的位数 private final static long MACHINE_ID_BITS = 10L; // 序列号所占的位数 private final static long SEQUENCE_BITS = 12L; // 机器 ID 最大值 private final static long MAX_MACHINE_ID = -1L ^ (-1L << MACHINE_ID_BITS); // 序列号最大值 private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BITS); // 机器 ID 偏移量 private final static long MACHINE_ID_SHIFT = SEQUENCE_BITS; // 时间戳偏移量 private final static long TIMESTAMP_SHIFT = SEQUENCE_BITS + MACHINE_ID_BITS; // 当前机器 ID private long machineId; // 当前时间戳 private long timestamp = -1L; // 当前序列号 private long sequence = 0L; // 上一次的 ID private long lastId = -1L; public SnowflakeIdGenerator(long machineId) { if (machineId > MAX_MACHINE_ID || machineId < 0) { throw new IllegalArgumentException(String.format("Machine ID must be between %d and %d", 0, MAX_MACHINE_ID)); } this.machineId =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值