public class SnowflakeId18 extends Object
特性: 1.支持自定义允许时间回拨的范围
2.解决跨毫秒起始值每次为0开始的情况(避免末尾必定为偶数,而不便于取余使用问题)
3.解决高并发场景中获取时间戳性能问题
4.支撑根据IP末尾数据作为workerId 5.时间回拨方案思考:1024个节点中分配10个点作为时间回拨序号(连续10次时间回拨的概率较小)
常见问题: 1.时间回拨问题 2.机器id的分配和回收问题 3.机器id的上限问题
| 限定符和类型 | 字段和说明 |
|---|---|
protected long |
maxDatacenterId |
protected long |
maxWorkerId |
| 构造器和说明 |
|---|
SnowflakeId18() |
SnowflakeId18(long workerId,
long datacenterId)
有参构造器
|
| 限定符和类型 | 方法和说明 |
|---|---|
protected long |
getDatacenterId()
基于网卡MAC地址计算余数作为数据中心
可自定扩展
|
static InetAddress |
getLocalAddress()
Find first valid IP from local network card
|
protected long |
getMaxWorkerId(long datacenterId)
基于 MAC + PID 的 hashcode 获取16个低位
可自定扩展
|
static SnowflakeId18 |
instance() |
long |
nextId()
获取下一个 ID
|
protected long |
tilNextMillis(long lastTimestamp) |
protected long |
timeGen() |
protected final long maxDatacenterId
protected final long maxWorkerId
public SnowflakeId18()
public SnowflakeId18(long workerId,
long datacenterId)
workerId - 工作机器 IDdatacenterId - 序列号public static SnowflakeId18 instance()
protected long getDatacenterId()
可自定扩展
protected long getMaxWorkerId(long datacenterId)
可自定扩展
public long nextId()
protected long tilNextMillis(long lastTimestamp)
protected long timeGen()
public static InetAddress getLocalAddress()
Copyright © 2024. All rights reserved.