From 6ae25ac33a43c665cf283ccde47733a5eb7fdc88 Mon Sep 17 00:00:00 2001 From: zhouzj Date: Sun, 14 Mar 2021 12:38:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=A6=E6=9D=9F=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C#/source/Yitter.IdGenTest/Program.cs | 10 +++++----- .../Yitter.IdGenerator/Contract/IdGeneratorOptions.cs | 5 +++-- C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs | 7 ++----- C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs | 8 ++------ C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj | 2 +- .../java/com/yitter/contract/IdGeneratorOptions.java | 5 +++-- .../src/main/java/com/yitter/core/SnowWorkerM1.java | 9 +++------ .../main/java/com/yitter/idgen/DefaultIdGenerator.java | 8 ++++---- 8 files changed, 23 insertions(+), 31 deletions(-) diff --git a/C#/source/Yitter.IdGenTest/Program.cs b/C#/source/Yitter.IdGenTest/Program.cs index 4a46c9a..5433b69 100644 --- a/C#/source/Yitter.IdGenTest/Program.cs +++ b/C#/source/Yitter.IdGenTest/Program.cs @@ -10,7 +10,7 @@ namespace Yitter.OrgSystem.TestA { // 测试参数(默认配置下,最佳性能是10W/s) - static int genIdCount = 5000; // 计算ID数量(如果要验证50W效率,请将TopOverCostCount设置为20000或适当增加SeqBitLength) + static int genIdCount = 50000; // 计算ID数量(如果要验证50W效率,请将TopOverCostCount设置为20000或适当增加SeqBitLength) static short method = 1; // 1-漂移算法,2-传统算法 @@ -30,11 +30,11 @@ namespace Yitter.OrgSystem.TestA Method = method, WorkerId = 1, - TopOverCostCount = 2000, - WorkerIdBitLength = 1, - SeqBitLength = 2, + //TopOverCostCount = 2000, + //WorkerIdBitLength = 1, + //SeqBitLength = 2, - MinSeqNumber = 1, + //MinSeqNumber = 1, // MaxSeqNumber = 200, diff --git a/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs b/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs index e6826db..8b8d24b 100644 --- a/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs +++ b/C#/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs @@ -30,12 +30,13 @@ namespace Yitter.IdGenerator /// /// 机器码 /// 与 WorkerIdBitLength 有关系 + /// (ushort类型,最大值65535,如果有更高要求,请修改数据类型,或联系作者) /// public virtual ushort WorkerId { get; set; } = 0; /// /// 机器码位长 - /// 范围:2-21(要求:序列数位长+机器码位长不超过22)。 + /// 范围:1-21(要求:序列数位长+机器码位长不超过22)。 /// 建议范围:6-12。 /// public virtual byte WorkerIdBitLength { get; set; } = 6;//10; @@ -55,7 +56,7 @@ namespace Yitter.IdGenerator /// /// 最小序列数(含) - /// 默认5,不小于1,不大于MaxSeqNumber-2 + /// 默认5,不小于1,不大于MaxSeqNumber /// public virtual ushort MinSeqNumber { get; set; } = 5; diff --git a/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs b/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs index 3a6d6f5..18580df 100644 --- a/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs +++ b/C#/source/Yitter.IdGenerator/Core/SnowWorkerM1.cs @@ -30,24 +30,21 @@ namespace Yitter.IdGenerator /// /// 机器码位长 - /// (机器码+序列数<=22位) /// protected readonly byte WorkerIdBitLength = 0; /// /// 自增序列数位长 - /// (机器码+序列数<=22位) /// protected readonly byte SeqBitLength = 0; /// - /// 最大序列数(含此值) - /// 超过最大值,就会从MinSeqNumber开始 + /// 最大序列数(含) /// protected readonly int MaxSeqNumber = 0; /// - /// 最小序列数(含此值) + /// 最小序列数(含) /// protected readonly ushort MinSeqNumber = 0; diff --git a/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs b/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs index 6b9ece5..4a1afc8 100644 --- a/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs +++ b/C#/source/Yitter.IdGenerator/DefaultIdGenerator.cs @@ -57,19 +57,15 @@ namespace Yitter.IdGenerator } var maxSeqNumber = Math.Pow(2, options.SeqBitLength) - 1; - //if (options.MaxSeqNumber > maxSeqNumber) - //{ - // options.MaxSeqNumber = (int)maxSeqNumber; - //} if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber) { throw new ApplicationException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]"); } - var maxValue = maxSeqNumber;// maxSeqNumber - 2; + var maxValue = maxSeqNumber; // maxSeqNumber - 1; if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue) { - throw new ApplicationException("MinSeqNumber error. (range:[5, " + maxValue + "]"); + throw new ApplicationException("MinSeqNumber error. (range:[1, " + maxValue + "]"); } switch (options.Method) diff --git a/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj b/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj index 141e4f4..6589a2d 100644 --- a/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj +++ b/C#/source/Yitter.IdGenerator/Yitter.IdGenerator.csproj @@ -18,7 +18,7 @@ Yitter https://gitee.com/yitter/idgenerator MIT - 1.0.6 + 1.0.7 diff --git a/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java b/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java index 0980cd4..d34a014 100644 --- a/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java +++ b/Java/source/src/main/java/com/yitter/contract/IdGeneratorOptions.java @@ -25,12 +25,13 @@ public class IdGeneratorOptions { /** * 机器码,必须由外部系统设置 * 与 WorkerIdBitLength 有关系 + * (short类型,最大值32766,如果有更高要求,请修改数据类型,或联系作者) */ public short WorkerId = 0; /** * 机器码位长 - * 范围:2-21(要求:序列数位长+机器码位长不超过22)。 + * 范围:1-21(要求:序列数位长+机器码位长不超过22)。 * 建议范围:6-12。 */ public byte WorkerIdBitLength = 6; @@ -50,7 +51,7 @@ public class IdGeneratorOptions { /** * 最小序列数(含) - * 默认5,不小于1,不大于MaxSeqNumber-1 + * 默认5,不小于1,不大于MaxSeqNumber */ public short MinSeqNumber = 5; diff --git a/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java b/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java index f67e665..311ee5b 100644 --- a/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java +++ b/Java/source/src/main/java/com/yitter/core/SnowWorkerM1.java @@ -23,24 +23,21 @@ public class SnowWorkerM1 implements ISnowWorker { /** * 机器码位长 - * (机器码+序列数<=22位) */ protected final byte WorkerIdBitLength; /** * 自增序列数位长 - * (机器码+序列数<=22位) */ protected final byte SeqBitLength; /** - * 最大序列数(含此值) - * 超过最大值,就会从MinSeqNumber开始 + * 最大序列数(含) */ protected final int MaxSeqNumber; /** - * 最小序列数(含此值) + * 最小序列数(含) */ protected final short MinSeqNumber; @@ -64,7 +61,7 @@ public class SnowWorkerM1 implements ISnowWorker { WorkerId = options.WorkerId; WorkerIdBitLength = options.WorkerIdBitLength == 0 ? 6 : options.WorkerIdBitLength; SeqBitLength = options.SeqBitLength == 0 ? 6 : options.SeqBitLength; - MaxSeqNumber = options.MaxSeqNumber > 0 ? options.MaxSeqNumber : (int) Math.pow(2, SeqBitLength); + MaxSeqNumber = options.MaxSeqNumber > 0 ? options.MaxSeqNumber : (int) Math.pow(2, SeqBitLength) - 1; MinSeqNumber = options.MinSeqNumber; TopOverCostCount = options.TopOverCostCount; BaseTime = options.BaseTime != 0 ? options.BaseTime : 1582136402000L; diff --git a/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java b/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java index ac916fc..3563536 100644 --- a/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java +++ b/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java @@ -30,7 +30,7 @@ public class DefaultIdGenerator implements IIdGenerator { } double maxWorkerIdNumber = Math.pow(2, options.WorkerIdBitLength) - 1; - if (options.WorkerId < 1 || options.WorkerId > maxWorkerIdNumber) { + if (options.WorkerId < 0 || options.WorkerId > maxWorkerIdNumber) { throw new IdGeneratorException("WorkerId error. (range:[1, " + maxWorkerIdNumber + "]"); } @@ -43,9 +43,9 @@ public class DefaultIdGenerator implements IIdGenerator { throw new IdGeneratorException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]"); } - double maxValue = maxSeqNumber - 2; - if (options.MinSeqNumber < 5 || options.MinSeqNumber > maxValue) { - throw new IdGeneratorException("MinSeqNumber error. (range:[5, " + maxValue + "]"); + double maxValue = maxSeqNumber; + if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue) { + throw new IdGeneratorException("MinSeqNumber error. (range:[1, " + maxValue + "]"); } switch (options.Method) {