1
0
mirror of synced 2025-12-24 14:07:57 +08:00

auto commit

This commit is contained in:
yitter
2021-04-06 11:03:37 +08:00
parent b0de7049e3
commit bdbfc4eedb
6 changed files with 54 additions and 50 deletions

View File

@@ -29,34 +29,31 @@ namespace Yitter.IdGenerator
/// <summary>
/// 机器码
/// WorkerIdBitLength 有关系
/// ushort类型最大值65535如果有更高要求请修改数据类型或联系作者)
/// 必须由外部设定,最大值 2^WorkerIdBitLength-1
/// </summary>
public virtual ushort WorkerId { get; set; } = 0;
/// <summary>
/// 机器码位长
/// 范围1-21(要求:序列数位长+机器码位长不超过22
/// 建议范围6-12。
/// 默认值6取值范围 [1, 15](要求:序列数位长+机器码位长不超过22
/// </summary>
public virtual byte WorkerIdBitLength { get; set; } = 6;//10;
/// <summary>
/// 序列数位长
/// 范围2-21要求序列数位长+机器码位长不超过22
/// 建议范围6-14。
/// 默认值6取值范围 [3, 21](要求:序列数位长+机器码位长不超过22
/// </summary>
public virtual byte SeqBitLength { get; set; } = 6;//10;
/// <summary>
/// 最大序列数(含)
/// 由SeqBitLength计算的最大值
/// 设置范围 [MinSeqNumber, 2^SeqBitLength-1]默认值0表示最大序列数取最大值2^SeqBitLength-1]
/// </summary>
public virtual int MaxSeqNumber { get; set; } = 0;
/// <summary>
/// 最小序列数(含)
/// 默认5不小于5不大于MaxSeqNumber
/// 默认5取值范围 [5, MaxSeqNumber]每毫秒的前5个序列数对应编号是0-4是保留位其中1-4是时间回拨相应预留位0是手工新值预留位
/// </summary>
public virtual ushort MinSeqNumber { get; set; } = 5;

View File

@@ -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;

View File

@@ -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与计算能力有关
}

View File

@@ -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;

View File

@@ -102,23 +102,6 @@ QQ群646049993
🔶 允许时间回拨至本算法预设基数(参数可调)。
## 💎 配置参数
<font color="#11aaff" size="5">❄</font> WorkerIdBitLength决定 WorkerId 的最大值。
<font color="#11aaff" size="5">❄</font> SeqBitLength决定每毫秒生成的 ID 个数。
<font color="#11aaff" size="5">❄</font> WorkerIdBitLength + SeqBitLength 不能超过 22。
<font color="#11aaff" size="5">❄</font> WorkerId最大值 2^WorkerIdBitLength-1。
<font color="#11aaff" size="5">❄</font> 默认配置值:
```
WorkerIdBitLength = 6
SeqBitLength = 6
```
## 💎 ID组成
* 本算法生成的ID由3部分组成沿用雪花算法定义
@@ -163,6 +146,19 @@ SeqBitLength = 6
🔵 在支持 4096 个工作节点时ID可用 1120 年不重复。
## 💎 配置参数
<font color="#11aaff" size="5">❄</font> WorkerIdBitLengthWorkerId位长决定 WorkerId 的最大值默认值6取值范围 [1, 19],。
<font color="#11aaff" size="5">❄</font> SeqBitLength自增数位长默认值6取值范围 [3, 21]建议不小于4决定每毫秒生成的 ID 个数。规则要求WorkerIdBitLength + SeqBitLength 不超过 22。
<font color="#11aaff" size="5">❄</font> WorkerId机器码无默认值必须由外部设定最大值 2^WorkerIdBitLength-1。不同机器或不同应用不能相同本算法提供一个通过 redis 自动注册 WorkerId 的动态库详见“Tools\AutoRegisterWorkerId”。
<font color="#11aaff" size="5">❄</font> MinSeqNumber最小自增数默认值5取值范围 [5, MaxSeqNumber]每毫秒的前5个自增数对应编号是0-4是保留位其中1-4是时间回拨相应预留位0是手工新值预留位。
<font color="#11aaff" size="5">❄</font> MaxSeqNumber最大自增数设置范围 [MinSeqNumber, 2^SeqBitLength-1]默认值0表示最大自增数取最大值2^SeqBitLength-1]不为0时用该设置值为最大自增数一般不用设置最大自增数除非多机共享WorkerId分段生成ID此时还要正确设置最小自增数
## 💎 常规集成
1⃣ 用单例模式调用。外部集成方使用更多的实例并行调用本算法不会增加ID产出效能因为本算法采用单线程模式生成ID。

View File

@@ -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,
}