简单一点,再简单一点,id生成工具,我们只讲使用,不讲原理
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。Twitter的Snowflake 算法就是这种生成器。
使用方法如下:
Snowflake snowflake = IdUtil.
createSnowflake(0, 20);
long id = snowflake.nextId();
注意
IdUtil.createSnowflake
每次调用会创建一个新的Snowflake对象,不同的Snowflake对象创建的ID可能会有重复,因此请自行维护此对象为单例,或者使用IdUtil.getSnowflake
使用全局单例对象。
snowFlake算法的优点:
-
生成ID时不依赖于DB,完全在内存生成,高性能高可用。
-
ID呈趋势递增,后续插入索引树的时候性能较好。
SnowFlake算法的缺点:
依赖于系统时钟的一致性。如果某台机器的系统时钟回拨,有可能造成ID冲突,或者ID乱序