2 个版本
0.1.2 | 2019 年 4 月 25 日 |
---|---|
0.1.1 | 2019 年 4 月 25 日 |
#32 in #id-generator
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 位的时间戳(因为只考虑到最后有意义的位)