算法:7位集群+40位时间戳+7位每秒最大生产个数数
适用于集群下唯一id生成:
public class TimeStampIDGenerator{
/**
* workerID must be unique for each node in cluster.
*/
private long workerID;
private long sequence = 0;
private long mark = 0;
private static final int MAXSEQUENCE = 128;
private static final int MAXWORKERID = 128;
private long lastTimeGen;
private final int workerIDBitWidth = 7;
private final int timeStampBitWidth = 40;
private final int sequenceBitWidth = 7;
private long sequenceLeftShift = 0;
private long timeStampLeftShift = sequenceBitWidth;
private long workerIDLeftShift = sequenceBitWidth + timeStampBitWidth;
/**
* MillSeconds from January 1, 1970 to November 3rd 2010
*/
private final long TIMEBASELINE = 1288834974657L;
public long nextId() {
synchronized (this) {
long timeGen = timeGen();
mark++;
sequence = (++sequence) % MAXSEQUENCE;
if (timeGen == lastTimeGen) {
if (mark >= MAXSEQUENCE) {
timeGen = tillNextMill();
mark = 0;
}
} else {
mark = 0;
}
lastTimeGen = timeGen;
return sequence << sequenceLeftShift | (timeGen - TIMEBASELINE) << timeStampLeftShift
| workerID << workerIDLeftShift;
}
}
public void setWorkerID(long id) {
if (validateWorkerID(id)) {
workerID = id;
} else {
throw new IllegalStateException("invalid id:" + id);
}
}
private boolean validateWorkerID(long id) {
if (id > MAXWORKERID || id < 0) {
return false;
} else {
return true;
}
}
private long tillNextMill() {
long timeGen = timeGen();
while (timeGen <= lastTimeGen) {
timeGen = timeGen();
}
// System.out.println("i'm in tillNextMill");
return timeGen;
}
private long timeGen() {
return System.currentTimeMillis();
}
@Override
public long generateId() {
return this.nextId();
}
}
分享到:
相关推荐
支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。 迄今为止最全面的分布式主键ID生成器。 优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理...
ID SnowFlake——ID50W/0.1s C#/Java/Go/Rust/C/SQL PHP PythonNode.jsRuby FFI WorkerId IdGenerator
迄今为止最全面的分布式主键ID生成器。优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力...支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。
ID SnowFlake——ID50W/0.1s C#/Java/Go/Rust/C/SQL PHP PythonNode.jsRuby FFI WorkerId IdGenerator node node node node node
最全面的分布式主键ID生成器。 优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1...支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。
ID SnowFlake——ID50W/0.1s C#/Java/Go/Rust/C/SQL PHP PythonNode.jsRuby FFI WorkerId IdGenerator c语言基础 c语言基础 c语言基础 c语言基础 c语言基础
4. **hilo**:高低位算法(Hi-Lo Algorithm),它通过组合高位和低位数字来生成 ID,从而减少对数据库的访问。你需要预先创建一个名为 `high_val` 的表,以及一个 `nextval` 列,还需要指定最大低位值(max_lo)。 ...
1. **主文件**:一般命名为`index.js`或`idGenerator.js`,这是库的核心实现,包含了生成唯一ID的算法和函数。可能包含的方法有`generate()`或`createID()`,这些方法内部可能使用了时间戳、随机数、递增计数器等...
1. 雪花算法:`id-generator` 可能采用了Twitter开源的Snowflake算法,该算法生成的ID由三部分组成:时间戳、工作节点ID和序列号。时间戳确保了ID的全局唯一性,工作节点ID可以区分不同的服务实例,序列号在每个节点...
在Hibernate中,`Generator`是负责生成主键值的策略,通常在`<id>`元素中通过`class`属性指定。不同的数据库和不同的应用场景可能需要不同的生成策略。接下来,我们将逐一介绍各种常见的生成策略及其适用场景。 ###...
支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。 这是优化的雪花算法(雪花漂移),它生成的ID更短、速度更快。支持 k8s 等容器环境自动扩容(自动注册 WorkerId),可在单机或分布式...
多语言版、包含生成16位、18位、19位3种长度的...idgenerator 16位雪花ID(多语言版,包括java、C#、Go、Python、NodeJs、PHP、Rust、SQL); itsm-learning 18位雪花ID(C#版); snowflake-net 19位雪花ID(C#版);
Snowflake-1.3.1_优化的雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W-0.1s),原生支持 C#-Java...支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator,顶尖优化,超强效能
public class SnowflakeIdGenerator { private static final SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0); public static long generateId() { return idWorker.nextId(); } } ``` 在这个例子中...
因此,"ID_generator"可能提供了一种优化的解决方案,比如使用雪花算法(Snowflake Algorithm)或者其他分布式ID生成算法。 雪花算法是由Twitter开源的一种生成全局唯一ID的算法,它的优点在于能够生成具有时间戳、...
Vesta ID Generator是基于Twitter的Snowflake算法实现的,该算法的主要特点是将64位整数分为几个部分:时间戳(毫秒)、工作节点ID(worker ID)和序列号(sequence)。这种设计使得在分布式系统中,每个节点可以...
在计算机科学中,随机数生成器(Random Number Generator, RNG)是关键工具,分为伪随机数生成器(Pseudo-Random Number Generator, PRNG)和真随机数生成器(True Random Number Generator, TRNG)。由于TRNG通常...
一个全新的雪花漂移算法,使生成的ID更短,速度加快。 2.核心在于扩展ID长度的同时,还能拥有极高瞬时并发处理量(保守值50W / 0.1s)。 3.本机支持C#/ Java / Go / Rust / C等语言,并由Rust提供PHP,Python,Node...
public SnowflakeIdGenerator(long workerId) { if (workerId || workerId > 1023) { throw new ArgumentException("WorkerId must be between 0 and 1023"); } this.workerId = workerId; } public long ...
借鉴了Twitter的Snowflake算法,UidGenerator将生成的ID分为多个部分,包括时间戳、工作节点ID和序列号,确保了ID的唯一性且具有一定的排序性。 二、UidGenerator的优势 1. **解决时钟回调问题**:Snowflake算法中...