4 个版本
0.1.3 | 2023年2月7日 |
---|---|
0.1.2 | 2022年8月10日 |
0.1.1 | 2022年8月9日 |
0.0.0 | 2020年5月17日 |
#8 在 #node-id
12KB
256 行代码(不包括注释)
pika rs
皮卡的 Rust 实现版本
安装
[dependencies]
pika = "0.1"
基本用法
let prefixes = [
PrefixRecord {
prefix: "user".to_string(),
description: Some("User ID".to_string()),
secure: false,
},
PrefixRecord {
prefix: "sk".to_string(),
description: Some("Secret Key".to_string()),
secure: true,
}
];
let mut pika = Pika::new(
prefixes.to_vec(),
InitOptions {
epoch: Some(1_650_153_600_000),
node_id: None,
disable_lowercase: Some(true),
},
);
pika.gen("user").unwrap();
// => user_Mzc5ODk1NTI4NzgxMTY4NjQ
pika.gen("sk").unwrap()
// => sk_c19iMGI0NTM4ZjU3ZThjYTIyZThjNjNlMTgwOTg5MWMyM18zODA2NTE5MjcwNDc5NDYyNA
节点 ID
默认情况下,节点 ID 通过查找第一个公开网络接口设备的 MAC 地址,然后对 1024 进行取模运算来计算。
这对于较小的系统来说效果很好,但是如果有很多节点生成雪花 ID,则可能会发生冲突。在这种情况下,您应该创建一个内部单例服务,该服务维护一个已分配节点 ID 的滚动计数,从 1 到 1023。然后,生成皮卡的服务应调用此服务以获取分配的节点 ID。
然后您可以在初始化皮卡时传入节点 ID,如下所示
let mut pika = Pika::new(
prefixes.to_vec(),
InitOptions {
epoch: Some(1_650_153_600_000),
node_id: custom_node_id,
disable_lowercase: Some(true),
},
);
依赖项
~2.5–4MB
~68K SLoC