6个版本
0.3.0 | 2024年2月14日 |
---|---|
0.2.1 | 2023年11月26日 |
0.1.2 | 2023年11月26日 |
#247 in 配置
17KB
217 行
lid (Lily的ID)
MSRV: 1.60.0
我想要一个既独特又极快且系统资源消耗小的东西,可以信赖。
我的初始用途是生成一个唯一且可以被多个服务生成而不必担心的ID,虽然不需要它是不可猜测的,但你也可以配置它以适应你不希望人们猜测ID的需求。
默认情况下,它使用Base36字母表,前缀字节为16个,序列字节为12个。这提供了(36^28)可能的ID。
示例用法
use lid::configs::{new_distributed, new_random};
fn main() {
// `new_distributed` gives a low randomness LID instance with the default size of 20 bytes.
// Don't use it if you don't want people potentially guessing next IDs.
let mut lid = new_distributed();
println!("{}", lid.generate());
// `new_random` gives a high randomness LID instance.
// Generic parameters are prefix and sequence length, combined is the total size of the id.
let mut lid = new_random::<6, 6>();
println!("{}", lid.generate());
// This uses static Mutex backed instances of the generators above.
// You must enable the `easy` feature to use these.
println!("{}", lid::easy::generate_distributed());
println!("{}", lid::easy::generate_random());
}
基准测试
CPU: 7950X3D
LID w/ 12 prefix, 8 sequence, min incr=100, max incr=1000
time: [13.656 ns 13.707 ns 13.783 ns]
LID w/ 16 prefix, 12 sequence, min incr=100, max incr=1000
time: [17.138 ns 17.208 ns 17.328 ns]
LID w/ 12 prefix, 8 sequence, min incr=50_000, max incr=5_000_000
time: [13.781 ns 13.860 ns 13.964 ns]
LID w/ 16 prefix, 12 sequence, min incr=50_000, max incr=5_000_000
time: [15.851 ns 15.886 ns 15.921 ns]
colorid w/ 20 bytes time: [405.33 ns 406.75 ns 408.38 ns]
colorid w/ 28 bytes time: [508.13 ns 508.84 ns 509.60 ns]
nanoid::nanoid!() time: [342.53 ns 343.13 ns 343.74 ns]
nanoid::nanoid!(28) time: [366.67 ns 366.89 ns 367.12 ns]
依赖项
~245–345KB