Twitter的分布式自增id算法 Snowflake java版本
1、网上源码很多,不在此列出
2、算法可以使用69年是怎么算出来的?时间戳占位41个,存的是当前时间戳和设置时间戳的差值,41位可以存放的最大差值是
(2^41-1)/1000*3600*24*365=69.7年
3、怎么通过生成的id反推各种信息?
例如:生成的id:719838167306243 转化为二进制为
Long.toBinaryString(719838167306243L)
1010001110101100000110001001 00001 00001 000000000011
从后往前推,因为时间戳差值位数不固定,后面12为是序列号,前面两个5位分别为机器id和数据中心id,序列号是3,机器id和数据中心id都是1,剩下的是时间戳差值,转化为十进制
System.out.println(Long.parseLong("1010001110101100000110001001", 2));
171622793,加上设置的初始时间1571221732842L
System.out.println(171622793L+1571221732842L);
等于1571393355635,转下时间格式,就可以得到生成id(订单号产生/用户下单的时间)。
github项目地址:https://github.com/twitter-archive/snowflake