refactor: optimize FlexIDKeyGenerator.java

This commit is contained in:
开源海哥 2023-08-04 17:36:24 +08:00
parent 5c89401d92
commit 1da3869dbd

View File

@ -33,7 +33,7 @@ import java.util.concurrent.ThreadLocalRandom;
* 1每台机器允许最大的并发量为 10w/s * 1每台机器允许最大的并发量为 10w/s
* 2出现时间回拨重启机器时在时间回拨未恢复的情况下可能出现 id 重复 * 2出现时间回拨重启机器时在时间回拨未恢复的情况下可能出现 id 重复
* <p> * <p>
* ID组成时间7+| 毫秒内的时间自增 00~992| 机器ID0 ~ 91| 随机数000~9993用于分库分表时通过 id 取模保证分布均衡 * ID组成时间7+| 毫秒内的时间自增 00~992| 机器ID00 ~ 992| 随机数00~992用于分库分表时通过 id 取模保证分布均衡
*/ */
public class FlexIDKeyGenerator implements IKeyGenerator { public class FlexIDKeyGenerator implements IKeyGenerator {
@ -85,12 +85,14 @@ public class FlexIDKeyGenerator implements IKeyGenerator {
lastTimeMillis = currentTimeMillis; lastTimeMillis = currentTimeMillis;
long diffTimeMillis = currentTimeMillis - INITIAL_TIMESTAMP; long diffTimeMillis = currentTimeMillis - INITIAL_TIMESTAMP;
return diffTimeMillis * 1000000 + clockSeq * 10000 + workId * 1000 + getRandomInt();
//ID组成时间7+| 毫秒内的时间自增 00~992| 机器ID00 ~ 992| 随机数00~992
return diffTimeMillis * 1000000 + clockSeq * 10000 + workId * 100 + getRandomInt();
} }
private int getRandomInt() { private int getRandomInt() {
return ThreadLocalRandom.current().nextInt(1000); return ThreadLocalRandom.current().nextInt(100);
} }