参考博客https://blog.csdn.net/ka_ka314/article/details/79594494 核心代码见此篇博客
- 采用了64位编码
- 第一位0,补充位写死不用管
- 后41位,毫秒级时间
- 后5位机器码
- 后5位业务编码
- 后12位自增长序列
测试
代码语言:javascript复制/**
* Created by lll on 2018/9/21 17:18.
*/
public class IdWorkerTest extends BaseTest{
@Autowired
private IdWorker idWorker;
@Test
public void nextId() throws Exception {
long l = idWorker.nextId();
System.out.println(l);
}
}
结果为1043067146059382784
ps:64位二进制,不代表你数据bigint存的长度就是64位,由于算法第一位为0,所以存储的最大数为2^63 -1,也就是9.2233*10^18,整个最大长度都不超过20位,所以数据库就没必要设很长,20就够了