2个版本
0.1.1 | 2022年8月9日 |
---|---|
0.1.0 | 2022年8月9日 |
#1 在 #pika
每月21次下载
11KB
234 行
pika rs
Pika的Rust实现
安装
[dependencies]
pika-id = "0.1.0"
基本用法
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。然后,生成Pika的服务应该调用此服务以获取分配的节点ID。
然后,您可以在初始化Pika时传入节点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.7–4MB
~69K SLoC