6个版本

0.3.0 2024年2月14日
0.2.1 2023年11月26日
0.1.2 2023年11月26日

#247 in 配置

MIT/Apache

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