前情提要
百度的UidGenerator是一个基于Java语言实现的分布式唯一ID生成器,它基于Snowflake算法进行了优化和改进
算法组成部分:
由于算法默认时间范围是28位,仅能表示8.7年左右的时间,且默认的起始时间为 "2016-05-20",
算法默认配置下, 支持最大的时间是 2024-11-20 21:24:16。 当超出改时间,时间部分会越位,进位到符号位,造成生成的ID为负数。
ID出现负值,一般对于业务逻辑影响不大, 主要影响了数据排序,当查询未设置排序条件时,负数id默认排在前面。
但是业务如果有依据ID排序的情况,则可能产生不可预见的问题。另外要确保前端对负数id的处理。
github地址:https://github.com/baidu/uid-generator
相关ISSUE
处理方式
@Bean("cachedUidGenerator")
CachedUidGenerator getCachedUidGenerator(DisposableWorkerIdAssigner disposableWorkerIdAssigner){
CachedUidGenerator cachedUidGenerator = new CachedUidGenerator();
cachedUidGenerator.setWorkerIdAssigner(disposableWorkerIdAssigner);
// setting generator Bits config......
cachedUidGenerator.setTimeBits(23);
cachedUidGenerator.setWorkerBits(31);
cachedUidGenerator.setSeqBits(9);
cachedUidGenerator.setEpochStr("2024-10-24");
return cachedUidGenerator;
}
推荐参数:
protected int timeBits = 31;
protected int workerBits = 23;
protected int seqBits = 9;
























