From bdbfc4eedb57d131a42957f31d9b37db4af9072f Mon Sep 17 00:00:00 2001 From: yitter Date: Tue, 6 Apr 2021 11:03:37 +0800 Subject: [PATCH] auto commit --- .../Contract/IdGeneratorOptions.cs | 13 ++++------ C/source/idgen/IdGenOptions.h | 17 ++++++++---- Go/source/idgen/IdGeneratorOptions.go | 10 ++++---- .../github/yitter/contract/IdGeneratorOptions.java | 17 +++++------- README.md | 30 ++++++++++------------ Rust/source/src/idgen/id_generator_options.rs | 17 ++++++++---- 6 files changed, 54 insertions(+), 50 deletions(-) diff --git a/C#.NET/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs b/C#.NET/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs index 8a54b3b..8dc5450 100644 --- a/C#.NET/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs +++ b/C#.NET/source/Yitter.IdGenerator/Contract/IdGeneratorOptions.cs @@ -29,34 +29,31 @@ namespace Yitter.IdGenerator /// /// 机器码 - /// 与 WorkerIdBitLength 有关系 - /// (ushort类型,最大值65535,如果有更高要求,请修改数据类型,或联系作者) + /// 必须由外部设定,最大值 2^WorkerIdBitLength-1 /// public virtual ushort WorkerId { get; set; } = 0; /// /// 机器码位长 - /// 范围:1-21(要求:序列数位长+机器码位长不超过22)。 - /// 建议范围:6-12。 + /// 默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) /// public virtual byte WorkerIdBitLength { get; set; } = 6;//10; /// /// 序列数位长 - /// 范围:2-21(要求:序列数位长+机器码位长不超过22)。 - /// 建议范围:6-14。 + /// 默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) /// public virtual byte SeqBitLength { get; set; } = 6;//10; /// /// 最大序列数(含) - /// (由SeqBitLength计算的最大值) + /// 设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1]) /// public virtual int MaxSeqNumber { get; set; } = 0; /// /// 最小序列数(含) - /// 默认5,不小于5,不大于MaxSeqNumber + /// 默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号是0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 /// public virtual ushort MinSeqNumber { get; set; } = 5; diff --git a/C/source/idgen/IdGenOptions.h b/C/source/idgen/IdGenOptions.h index a50aeaf..03a25c1 100644 --- a/C/source/idgen/IdGenOptions.h +++ b/C/source/idgen/IdGenOptions.h @@ -10,18 +10,25 @@ typedef struct IdGenOptions { /// 雪花计算方法,(1-漂移算法|2-传统算法),默认1 uint8_t Method; + /// 基础时间(ms单位),不能超过当前系统时间 uint64_t BaseTime; - /// 机器码,与 WorkerIdBitLength 有关系 + + /// 机器码,必须由外部设定,最大值 2^WorkerIdBitLength-1 uint32_t WorkerId; - /// 机器码位长,范围:1-21(要求:序列数位长+机器码位长不超过22) + + /// 机器码位长,默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) uint8_t WorkerIdBitLength; - /// 序列数位长,范围:2-21(要求:序列数位长+机器码位长不超过22) + + /// 序列数位长,默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) uint8_t SeqBitLength; - /// 最大序列数(含),(由 SeqBitLength 计算的最大值) + + /// 最大序列数(含),设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1]) uint32_t MaxSeqNumber; - /// 最小序列数(含),默认5,不小于5,不大于 MaxSeqNumber + + /// 最小序列数(含),默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号是0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 uint32_t MinSeqNumber; + /// 最大漂移次数(含),默认2000,推荐范围 500-20000(与计算能力有关) uint32_t TopOverCostCount; diff --git a/Go/source/idgen/IdGeneratorOptions.go b/Go/source/idgen/IdGeneratorOptions.go index 136179a..11e7761 100644 --- a/Go/source/idgen/IdGeneratorOptions.go +++ b/Go/source/idgen/IdGeneratorOptions.go @@ -9,11 +9,11 @@ package idgen type IdGeneratorOptions struct { Method uint16 // 雪花计算方法,(1-漂移算法|2-传统算法),默认1 BaseTime int64 // 基础时间(ms单位),不能超过当前系统时间 - WorkerId uint16 // 机器码,与 WorkerIdBitLength 有关系 - WorkerIdBitLength byte // 机器码位长,范围:1-21(要求:序列数位长+机器码位长不超过22) - SeqBitLength byte // 序列数位长,范围:2-21(要求:序列数位长+机器码位长不超过22) - MaxSeqNumber uint32 // 最大序列数(含),(由SeqBitLength计算的最大值) - MinSeqNumber uint32 // 最小序列数(含),默认5,不小于5,不大于MaxSeqNumber + WorkerId uint16 // 机器码,必须由外部设定,最大值 2^WorkerIdBitLength-1 + WorkerIdBitLength byte // 机器码位长,默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) + SeqBitLength byte // 序列数位长,默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) + MaxSeqNumber uint32 // 最大序列数(含),设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1]) + MinSeqNumber uint32 // 最小序列数(含),默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号是0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 TopOverCostCount uint32 // 最大漂移次数(含),默认2000,推荐范围500-10000(与计算能力有关) } diff --git a/Java/source/src/main/java/com/github/yitter/contract/IdGeneratorOptions.java b/Java/source/src/main/java/com/github/yitter/contract/IdGeneratorOptions.java index 8c56dae..0bbe49e 100644 --- a/Java/source/src/main/java/com/github/yitter/contract/IdGeneratorOptions.java +++ b/Java/source/src/main/java/com/github/yitter/contract/IdGeneratorOptions.java @@ -6,7 +6,7 @@ package com.github.yitter.contract; /** * 雪花算法使用的参数 - * 此处代码不采用 get/set 那种冗长的写法 + * 参数说明,参考 README.md 的 “配置参数” 章节。 */ public class IdGeneratorOptions { @@ -23,35 +23,32 @@ public class IdGeneratorOptions { public long BaseTime = 1582136402000L; /** - * 机器码,必须由外部系统设置 - * 与 WorkerIdBitLength 有关系 - * (short类型,最大值32766,如果有更高要求,请修改数据类型,或联系作者) + * 机器码 + * 必须由外部设定,最大值 2^WorkerIdBitLength-1 */ public short WorkerId = 0; /** * 机器码位长 - * 范围:1-21(要求:序列数位长+机器码位长不超过22)。 - * 建议范围:6-12。 + * 默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) */ public byte WorkerIdBitLength = 6; /** * 序列数位长 - * 范围:2-21(要求:序列数位长+机器码位长不超过22)。 - * 建议范围:6-14。 + * 默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) */ public byte SeqBitLength = 6; /** * 最大序列数(含) - * (由SeqBitLength计算的最大值) + * 设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1]) */ public short MaxSeqNumber = 0; /** * 最小序列数(含) - * 默认5,不小于5,不大于MaxSeqNumber + * 默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号是0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 */ public short MinSeqNumber = 5; diff --git a/README.md b/README.md index d1ef7d6..e5a1696 100644 --- a/README.md +++ b/README.md @@ -102,23 +102,6 @@ QQ群:646049993 🔶 允许时间回拨至本算法预设基数(参数可调)。 -## 💎 配置参数 - - WorkerIdBitLength,决定 WorkerId 的最大值。 - - SeqBitLength,决定每毫秒生成的 ID 个数。 - - WorkerIdBitLength + SeqBitLength 不能超过 22。 - - WorkerId,最大值 2^WorkerIdBitLength-1。 - - 默认配置值: - -``` -WorkerIdBitLength = 6 -SeqBitLength = 6 -``` - ## 💎 ID组成 * 本算法生成的ID由3部分组成(沿用雪花算法定义): @@ -163,6 +146,19 @@ SeqBitLength = 6 🔵 在支持 4096 个工作节点时,ID可用 1120 年不重复。 +## 💎 配置参数 + + WorkerIdBitLength,WorkerId位长,决定 WorkerId 的最大值,默认值6,取值范围 [1, 19],。 + + SeqBitLength,自增数位长,默认值6,取值范围 [3, 21](建议不小于4),决定每毫秒生成的 ID 个数。规则要求:WorkerIdBitLength + SeqBitLength 不超过 22。 + + WorkerId,机器码,无默认值,必须由外部设定,最大值 2^WorkerIdBitLength-1。不同机器或不同应用不能相同,本算法提供一个通过 redis 自动注册 WorkerId 的动态库,详见“Tools\AutoRegisterWorkerId”。 + + MinSeqNumber,最小自增数,默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个自增数对应编号是0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位。 + + MaxSeqNumber,最大自增数,设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大自增数取最大值(2^SeqBitLength-1]),不为0时,用该设置值为最大自增数,一般不用设置最大自增数,除非多机共享WorkerId分段生成ID(此时还要正确设置最小自增数)。 + + ## 💎 常规集成 1️⃣ 用单例模式调用。外部集成方使用更多的实例并行调用本算法,不会增加ID产出效能,因为本算法采用单线程模式生成ID。 diff --git a/Rust/source/src/idgen/id_generator_options.rs b/Rust/source/src/idgen/id_generator_options.rs index f190505..6454b7d 100644 --- a/Rust/source/src/idgen/id_generator_options.rs +++ b/Rust/source/src/idgen/id_generator_options.rs @@ -6,18 +6,25 @@ pub struct IdGeneratorOptions { /// 雪花计算方法,(1-漂移算法|2-传统算法),默认1 pub Method: u8, + /// 基础时间(ms单位),不能超过当前系统时间 pub BaseTime: i64, - /// 机器码,与 WorkerIdBitLength 有关系 + + /// 必须由外部设定,最大值 2^WorkerIdBitLength-1 pub WorkerId: u32, - /// 机器码位长,范围:1-21(要求:序列数位长+机器码位长不超过22) + + /// 默认值6,取值范围 [1, 15](要求:序列数位长+机器码位长不超过22) pub WorkerIdBitLength: u8, - /// 序列数位长,范围:2-21(要求:序列数位长+机器码位长不超过22) + + /// 默认值6,取值范围 [3, 21](要求:序列数位长+机器码位长不超过22) pub SeqBitLength: u8, - /// 最大序列数(含),(由 SeqBitLength 计算的最大值) + + /// 设置范围 [MinSeqNumber, 2^SeqBitLength-1],默认值0,表示最大序列数取最大值(2^SeqBitLength-1]) pub MaxSeqNumber: u32, - /// 最小序列数(含),默认5,不小于5,不大于 MaxSeqNumber + + /// 默认值5,取值范围 [5, MaxSeqNumber],每毫秒的前5个序列数对应编号是0-4是保留位,其中1-4是时间回拨相应预留位,0是手工新值预留位 pub MinSeqNumber: u32, + /// 最大漂移次数(含),默认2000,推荐范围 500-20000(与计算能力有关) pub TopOverCostCount: u32, }