#snowflake #unique-id #id-generator #twitter #64-bit #machine #timestamp

idgen

基于 Twitter Snowflake 的唯一 64 位 ID 生成器

2 个版本

0.1.2 2019 年 4 月 25 日
0.1.1 2019 年 4 月 25 日

#32 in #id-generator

MIT 许可证

8KB
118

唯一 ID 生成器

受 Twitter Snowflake 启发的唯一 64 位 ID 生成器

默认设置是

  • 机器 ID - 8 位(最多 255 台机器)
  • 时间戳子集 - 41 位 ~Unix Epoch 以来 69 年
  • 剩余位(15)- 序列号

如果序列号溢出,生成器将在下一个毫秒到来之前等待 100 微秒的块。

可以进行配置

  • 机器 ID - 最多 8 位
  • 时间戳子集 - 从 41 到 43 位(Unix Epoch 以来最多 278 年)

使用方法

将其添加到 Cargo.toml 依赖项中

idgen = "0.1.2"
use idgen::IDGen;

fn main() {
    let idgen = IDGen::new(128);
    println!("{}", idgen.new_id());
}

或者,可以将其配置为序列号位更多而机器 ID 位更少

use idgen::IDGen;

fn main() {
    let idgen = IDGen::new_with_config(1, 1, 41);
    println!("{}", idgen.new_id());
}

注意事项

  • 性能“尚可” - 在 2019 年 MacBook Air 上,以单线程模式生成 ~3M 个唯一 ID 每秒(内部可变性/线程安全的开销至少减半性能)
  • 线程安全
  • 严格来说,可以使用少于 41 位的时间戳(因为只考虑到最后有意义的位)

没有运行时依赖