#uuid #unique #guid #quessable

fastuuid

快速且轻量级的生成192位uuid,支持128位字符串

3个不稳定版本

0.3.0 2019年9月2日
0.2.1 2019年8月29日
0.2.0 2019年8月28日
0.1.0 2019年8月28日

#22 in #guid

Download history 10/week @ 2024-03-27 15/week @ 2024-04-03 7/week @ 2024-04-17 19/week @ 2024-04-24 12/week @ 2024-05-08 7/week @ 2024-05-15 6/week @ 2024-05-22 4/week @ 2024-05-29 16/week @ 2024-06-05 14/week @ 2024-06-12 34/week @ 2024-06-19 22/week @ 2024-06-26

87 每月下载次数

Apache-2.0 OR MIT

14KB
181 代码行,不含注释

fastuuid

fastuuid 是由Go语言编写的 https://github.com/rogpeppe/fastuuid 的氧化版本。它提供快速生成可猜测和唯一的192位通用唯一标识符,并支持简单的128位RFC-4122 V4 UUID。生成的UUID不是不可猜测的,因为每个生成的UUID都与之前生成的UUID相邻。

它避免在每次生成UUID时从rand读取192位,并提供了一个API来获取128位字符串引用,可以选择是否分配新的堆字符串对象,同时提供相同函数的安全和不安全版本。

包含基准测试。在我的机器上,生成192位UUID需要大约7纳秒,而生成128位字符串(不分配额外堆内存,不安全版本)分别需要小于20纳秒和大约95纳秒。安全版本需要额外的约10纳秒。

用法

fastuuid-rs 可以通过以下方式依赖

[dependencies]
fastuuid = "0.3.0"

示例

192位UUID

use fastuuid::Generator;

fn main() {
    let generator = Generator::new();
    let uuid:[u8;24] = generator.next();
}

128位UUID

  • 带新的字符串分配
use fastuuid::Generator;

fn main() {
    let generator = Generator::new();
    let uuid = generator.hex128_as_string().unwrap();
}
  • 不带新的字符串分配
use fastuuid::Generator;

fn main() {
    let generator = Generator::new();
    let mut buffer: [u8; 36] = [0; 36];
    let uuid = generator.hex128_as_str(&mut buffer).unwrap();
}

注意:这两个函数还有一个不安全版本,它使用不安全的UTF8到字符串的转换,使它们稍微快一点。可以并发使用所有这些。

依赖项

~645KB
~12K SLoC