唯一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,如下**
```Java
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.
赞 (0) 评论 分享 ()