参考博客https://blog.csdn.net/ka_ka314/article/details/79594494 核心代码见此篇博客
- 采用了64位编码
- 第一位0,补充位写死不用管
- 后41位,毫秒级时间
- 后5位机器码
- 后5位业务编码
- 后12位自增长序列
测试
/** * 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就够了