Rust唯一ID生成库cuid2的使用,cuid2提供高性能、可排序且安全的分布式唯一标识符生成方案

Rust唯一ID生成库cuid2的使用

cuid2是一个为高性能、水平扩展和安全设计的防碰撞ID生成库。它是CUID2算法的Rust实现,提供了分布式系统中生成唯一标识符的解决方案。

基本用法

最简单的方式是使用create_id()函数生成ID:

use cuid2;

let id = cuid2::create_id();

assert_eq!(24, id.len());

库还提供了cuid()别名,作为对v1 cuid包的替代:

use cuid2::cuid;

let id = cuid();

assert_eq!(24, id.len());

自定义配置

如果需要自定义CUID生成的参数,可以创建构造器并设置属性:

use cuid2::CuidConstructor;

let constructor = CuidConstructor::new().with_length(32);

let id = constructor.create_id();

assert_eq!(32, id.len());

命令行工具

安装后,该库还提供了cuid2命令行工具来生成CUID:

> cuid2
y3cfw1hafbtezzflns334sb2

完整示例代码

下面是一个完整的示例,展示如何使用cuid2库生成不同长度的ID:

use cuid2::{create_id, cuid, CuidConstructor};

fn main() {
    // 基本用法
    let id = create_id();
    println!("默认长度ID: {}", id);
    
    // 使用别名
    let alias_id = cuid();
    println!("使用别名生成的ID: {}", alias_id);
    
    // 自定义长度
    let constructor = CuidConstructor::new().with_length(32);
    let custom_id = constructor.create_id();
    println!("32位长度ID: {}", custom_id);
    
    // 批量生成
    println!("批量生成5个ID:");
    for _ in 0..5 {
        println!("{}", create_id());
    }
}

使用cuid2生成的ID具有以下特点:

  • 防碰撞
  • 可排序(按时间顺序)
  • 安全(不泄露信息)
  • 高性能
  • 适合分布式系统

要安装此库,可以在项目目录中运行:

cargo add cuid2

或者在Cargo.toml中添加:

cuid2 = "0.1.4"

完整示例代码

以下是一个更完整的cuid2使用示例,包含更多功能和注释:

use cuid2::{create_id, CuidConstructor};
use std::time::Instant;

fn main() {
    // 基准测试开始时间
    let start = Instant::now();
    
    // 1. 基本用法 - 生成默认24位长度的ID
    let default_id = create_id();
    println!("默认生成的ID (24位): {}", default_id);
    println!("ID长度: {}", default_id.len());
    
    // 2. 自定义配置 - 生成不同长度的ID
    let mut constructor = CuidConstructor::new()
        .with_length(36)  // 设置36位长度
        .with_counter(100);  // 设置初始计数器值
    
    let custom_id = constructor.create_id();
    println!("\n自定义生成的ID (36位): {}", custom_id);
    println!("ID长度: {}", custom_id.len());
    
    // 3. 批量生成性能测试
    println!("\n批量生成10000个ID的性能测试:");
    let batch_start = Instant::now();
    let mut ids = Vec::with_capacity(10_000);
    
    for _ in 0..10_000 {
        ids.push(create_id());
    }
    
    // 检查是否有重复ID
    let unique_count: std::collections::HashSet<_> = ids.iter().collect();
    println!("生成数量: {}", ids.len());
    println!("唯一ID数量: {}", unique_count.len());
    println!("耗时: {:?}", batch_start.elapsed());
    
    // 4. 输出第一个和最后一个ID以展示可排序性
    if !ids.is_empty() {
        println!("\n第一个生成的ID: {}", ids[0]);
        println!("最后一个生成的ID: {}", ids[ids.len()-1]);
    }
    
    // 总耗时
    println!("\n总执行时间: {:?}", start.elapsed());
}

这个完整示例展示了:

  1. 基本ID生成功能
  2. 自定义ID长度和配置
  3. 批量生成性能测试
  4. 唯一性验证
  5. 可排序性演示
  6. 执行时间测量

要运行这个示例,请确保已按照前面的说明将cuid2添加到项目的依赖项中。


1 回复

Rust唯一ID生成库cuid2的使用指南

介绍

cuid2是一个高性能、可排序且安全的分布式唯一标识符生成库,专为Rust设计。它生成的ID具有以下特点:

  • 唯一性:极低的碰撞概率
  • 可排序性:按时间大致有序
  • 安全性:不包含敏感信息
  • 分布式友好:无需中央协调

安装

在Cargo.toml中添加依赖:

[dependencies]
cuid2 = "0.3"

基本使用

生成ID

use cuid2;

fn main() {
    // 生成一个默认长度的CUID2 ID
    let id = cuid2::create_id();
    println!("Generated ID: {}", id);
}

自定义配置

use cuid2::{CuidConstructor, Length};

fn main() {
    // 创建一个自定义长度的ID生成器
    let constructor = CuidConstructor::new().with_length(Length::Long);
    
    // 生成ID
    let id = constructor.create_id();
    println!("Long ID: {}", id);
}

高级用法

使用自定义随机数生成器

use cuid2::{CuidConstructor, Length};
use rand::thread_rng;

fn main() {
    let constructor = CuidConstructor::new()
        .with_rng(thread_rng())
        .with_length(Length::Short);
    
    let id = constructor.create_id();
    println!("Short ID with custom RNG: {}", id);
}

批量生成ID

use cuid2;

fn generate_ids(count: usize) -> Vec<String> {
    (0..count).map(|_| cuid2::create_id()).collect()
}

fn main() {
    let ids = generate_ids(5);
    println!("Batch IDs: {:?}", ids);
}

性能考虑

cuid2设计为高性能ID生成器,但在极高吞吐量场景下,可以考虑重用生成器实例:

use cuid2::CuidConstructor;

fn main() {
    let constructor = CuidConstructor::new();
    
    // 在循环中重用生成器
    for _ in 0..1000 {
        let id = constructor.create_id();
        // 使用ID...
    }
}

安全提示

cuid2生成的ID不包含敏感信息,可以安全地在日志和URL中使用:

use cuid2;

fn create_secure_url() -> String {
    let id = cuid2::create_id();
    format!("https://example.com/resource/{}", id)
}

fn main() {
    println!("Secure URL: {}", create_secure_url());
}

完整示例

这是一个结合了基本使用和高级用法的完整示例:

use cuid2::{CuidConstructor, Length};
use rand::thread_rng;

fn main() {
    // 基本用法 - 生成默认ID
    let default_id = cuid2::create_id();
    println!("Default ID: {}", default_id);

    // 自定义长度
    let constructor = CuidConstructor::new()
        .with_length(Length::Long);
    let long_id = constructor.create_id();
    println!("Long ID: {}", long_id);

    // 使用自定义随机数生成器
    let custom_rng = CuidConstructor::new()
        .with_rng(thread_rng())
        .with_length(Length::Short);
    let short_id = custom_rng.create_id();
    println!("Short ID with custom RNG: {}", short_id);

    // 批量生成ID
    let ids: Vec<String> = (0..5).map(|_| cuid2::create_id()).collect();
    println!("Batch IDs: {:?}", ids);

    // 性能优化 - 重用生成器
    let optimized_constructor = CuidConstructor::new();
    let optimized_ids: Vec<String> = (0..10).map(|_| optimized_constructor.create_id()).collect();
    println!("Optimized generation: {:?}", optimized_ids);

    // 安全使用 - 在URL中
    let secure_url = format!("https://api.example.com/users/{}", cuid2::create_id());
    println!("Secure API URL: {}", secure_url);
}

cuid2是分布式系统中生成唯一标识符的优秀选择,特别适合需要可排序ID且不透露系统内部信息的场景。

回到顶部