唯一ID生成器算法

1. 计算时间(毫秒)

一年的毫秒数: 365 * 24 * 60 * 60 * 1000 = 31,536,000,000
一般我们采用 1970 年开始的时间,那么我们假设用 100 年,
也就是 31,536,000,000 * 100 = 3,153,600,000,000 (42bit)

2. 计算 1 ms 内能产生的最大自增长 ID,如下

long ts = System.nanoTime();
long i=0;
while (System.nanoTime() - ts < 1000000) {
  i++;
}
System.out.println("i=" + i);

我们可以得出结论,大概在 1000 ~ 1500 左右,也就是说,12bit 足够了。

3. 分布式计算

一个 Long 类型最长 64bit,我们可以使用如下的公式计算:

机器ID(8bit) + 时间(毫秒,42bit) + 自增长ID(14bit)

如果按照 base62 来编码,那么将产生 11 位长度的字符串。

如果要产生 10 位 base62 编码的字符串,那么最大可以使用 58bit,可以是如下的公式

机器ID(4bit) + 时间(毫秒,42bit) + 自增长ID(12bit)

base62 编码出来,长度不足的,可以前补 0.

你可能感兴趣的:(id)