Java
SnowflakeId
SnowflakeId 是一个分布式唯一 ID 生成器,灵感来源于 Twitter 的 Snowflake 算法。
它基于当前时间戳、工作节点 ID、数据中心 ID 和序列号生成 64 位唯一 ID。
生成的 ID 可按时间排序,且可在分布式环境中生成,无需节点间协调。
生成的 ID 结构如下: - 41 位用于时间戳(自自定义纪元以来的毫秒数) - 5 位用于数据中心 ID - 5 位用于工作节点 ID - 12 位用于序列号
此实现允许每个工作节点每毫秒生成最多 1024 个唯一 ID,并支持最多 32 个数据中心,每个数据中心最多 32 个工作节点。 自定义纪元设置为 2021 年 1 月 1 日。
- Module:
core - Type:
final class - Package:
com.euonia.core - Author: damon(zhaorong@outlook.com)
Constants¶
| Constant | Value | Description |
|---|---|---|
MAX_WORKER_ID |
31 |
最大工作节点 ID |
MAX_DATACENTER_ID |
31 |
最大数据中心 ID |
MAX_SEQUENCE |
4095 |
最大序列号 |
Methods¶
getInstance¶
使用指定的 workerId 和 datacenterId 获取实例。(未提供注释)
- Parameters:
workerId(long): 工作节点 IDdatacenterId(long): 数据中心 ID- Returns:
SnowflakeId- 新实例
getInstance¶
获取 SnowflakeId 的默认实例,使用 workerId 和 datacenterId 都为 0。
- Returns:
SnowflakeId- 默认的 SnowflakeId 实例
nextId¶
生成下一个唯一 ID。该方法是线程安全的,确保在多线程环境下生成的 ID 仍然唯一。如果系统时钟回退,将抛出异常。
- Returns:
long- 下一个唯一的 64 位 ID
Usage¶
// 默认实例(workerId=0, datacenterId=0)
SnowflakeId idGen = SnowflakeId.getInstance();
// 自定义 workerId 和 datacenterId
SnowflakeId idGen2 = SnowflakeId.getInstance(1, 1);
// 生成 ID
long id = idGen.nextId();