From 1da3869dbd2573a6e53e282cea67a8f8e4f5b32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Fri, 4 Aug 2023 17:36:24 +0800 Subject: [PATCH] refactor: optimize FlexIDKeyGenerator.java --- .../mybatisflex/core/keygen/impl/FlexIDKeyGenerator.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/keygen/impl/FlexIDKeyGenerator.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/keygen/impl/FlexIDKeyGenerator.java index 1c3effca..bbd99d89 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/keygen/impl/FlexIDKeyGenerator.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/keygen/impl/FlexIDKeyGenerator.java @@ -33,7 +33,7 @@ import java.util.concurrent.ThreadLocalRandom; * 1、每台机器允许最大的并发量为 10w/s。 * 2、出现时间回拨,重启机器时,在时间回拨未恢复的情况下,可能出现 id 重复。 *

- * ID组成:时间(7+)| 毫秒内的时间自增 (00~99:2)| 机器ID(0 ~ 9:1)| 随机数(000~999:3)用于分库分表时,通过 id 取模,保证分布均衡。 + * ID组成:时间(7+)| 毫秒内的时间自增 (00~99:2)| 机器ID(00 ~ 99:2)| 随机数(00~99:2)用于分库分表时,通过 id 取模,保证分布均衡。 */ public class FlexIDKeyGenerator implements IKeyGenerator { @@ -85,12 +85,14 @@ public class FlexIDKeyGenerator implements IKeyGenerator { lastTimeMillis = currentTimeMillis; long diffTimeMillis = currentTimeMillis - INITIAL_TIMESTAMP; - return diffTimeMillis * 1000000 + clockSeq * 10000 + workId * 1000 + getRandomInt(); + + //ID组成:时间(7+)| 毫秒内的时间自增 (00~99:2)| 机器ID(00 ~ 99:2)| 随机数(00~99:2) + return diffTimeMillis * 1000000 + clockSeq * 10000 + workId * 100 + getRandomInt(); } private int getRandomInt() { - return ThreadLocalRandom.current().nextInt(1000); + return ThreadLocalRandom.current().nextInt(100); }