5个稳定版本
2.0.0 | 2022年2月8日 |
---|---|
1.2.1 | 2021年12月13日 |
1.2.0 | 2021年10月22日 |
1.1.0 | 2021年10月22日 |
1.0.0 | 2021年10月19日 |
在算法中排名1136
每月下载量2,601
43KB
859 行
IdGenerator
强大的唯一ID生成器。
注意:现在这个包已升级到v2,意味着大多数v1版本的接口已被弃用。如果您仍想使用v1,请参阅分支v1
。您还可以在deprecated.md中查看如何使用v1。
使用新的雪花漂移算法,ID更短,生成更快。核心是缩短ID长度,同时也能提供非常高的瞬时并发处理能力(约50W/0.1s),以及强大的配置能力。
如果您想达到如此高的吞吐量,请设置更高的seq_bit_len
(例如10或12)。
使用方法
此库实现的现成实例
此库实现了两个现成实例
IdInstance
:只有一个生成器的实例。有关使用示例,请参阅examples/single.rs。IdVecInstance
:具有多个生成器的实例。有关使用示例,请参阅examples/multiple.rs。
您还可以在src/lib.rs中查看库的测试方法,或在bench/id_bench.rs中查看基准测试方法。
主要步骤可以描述如下
- 设置选项(即配置实例)。
- 初始化实例或设置其选项。
- 调用
next_id
方法生成唯一ID。
您可以为实例配置的内容,如结构IdGeneratorOptions
所示
method
:1表示带有位移的雪花算法。base_time
:雪花算法的基本时间,以毫秒为单位,不能超过当前系统时间。worker_id
:应在外部决定,小于2^worker_id_bit_len-1
。worker_id_bit_len
:worker_id 的位数长度,默认为 8,范围在 [1, 15] 内。强烈建议worker_id_bit_len + seq_bit_len
小于 22。seq_bit_len
:序列的位数长度,默认为 8,范围在 [3, 21] 内。max_seq_num
:设置范围为 [min_seq_num, 2^seq_bit_len-1],默认为 0,表示2^seq_bit_len-1
。min_seq_num
:默认为 5,范围 [5, max_seq_num],保留用于手动值和时间回滚。top_over_cost_count
:最大位移次数(包含),默认为 2000,建议范围为 [500, 20000](与计算能力相关)。
一个非常简单的例子
use idgenerator::*;
fn main() {
// Setup the option for the id generator instance.
let options = IdGeneratorOptions::new().worker_id(1).worker_id_bit_len(6);
// Initialize the id generator instance with the option.
// Other options not set will be given the default value.
let _ = IdInstance::init(options)?;
// Call `next_id` to generate a new unique id.
let id = IdInstance::next_id();
println!("id is {}", id);
}
对于更复杂的用法,请参阅目录 examples
。
自定义实例
此库在 CoreIdGenerator
结构体内部封装了雪花算法。您可以将此结构体封装到您自己的唯一 ID 生成器实例中。
有关更多详细信息,请参阅文档。
致谢
- 受到yitter/IdGenerator的启发
依赖
~1.7–7.5MB
~48K SLoC