#unique-id #snowflake-id #id #generator #snowflake #algorithm

idgenerator

强大的唯一ID生成器。使用新的雪花漂移算法,ID更短,生成更快。核心是缩短ID长度,同时也能提供非常高的瞬时并发处理能力,以及强大的配置能力。

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

Download history 126/week @ 2024-03-13 133/week @ 2024-03-20 163/week @ 2024-03-27 106/week @ 2024-04-03 81/week @ 2024-04-10 84/week @ 2024-04-17 87/week @ 2024-04-24 376/week @ 2024-05-01 606/week @ 2024-05-08 396/week @ 2024-05-15 453/week @ 2024-05-22 543/week @ 2024-05-29 842/week @ 2024-06-05 590/week @ 2024-06-12 591/week @ 2024-06-19 453/week @ 2024-06-26

每月下载量2,601

MIT协议

43KB
859

IdGenerator

github-repo LICENSE Apache-2.0

docs.rs crates.io codecov

强大的唯一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中查看基准测试方法。

主要步骤可以描述如下

  1. 设置选项(即配置实例)。
  2. 初始化实例或设置其选项。
  3. 调用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 生成器实例中。

有关更多详细信息,请参阅文档

致谢

依赖

~1.7–7.5MB
~48K SLoC