Rust唯一ID生成库cuid-util的使用,提供高性能分布式系统唯一标识符生成功能

Rust唯一ID生成库cuid-util的使用,提供高性能分布式系统唯一标识符生成功能

安装

在项目目录中运行以下Cargo命令:

cargo add cuid-util

或在Cargo.toml中添加以下行:

cuid-util = "0.1.1"

示例使用

下面是一个完整的示例,展示如何使用cuid-util生成唯一ID:

use cuid_util::Cuid;

fn main() {
    // 生成一个新的CUID
    let id = Cuid::new();
    println!("生成的CUID: {}", id);
    
    // 生成一个简短的CUID (cuid2)
    let short_id = Cuid::short();
    println!("生成的短CUID: {}", short_id);
    
    // 验证CUID是否有效
    let test_id = "cln5wjr7e0000tk08h7b4x3w3";
    if Cuid::is_valid(test_id) {
        println!("{} 是一个有效的CUID", test_id);
    } else {
        println!("{} 不是一个有效的CUID", test_id);
    }
}

完整示例demo

use cuid_util::Cuid;
use std::thread;

fn main() {
    // 示例1: 基础使用
    println!("=== 基础使用示例 ===");
    let id1 = Cuid::new();
    println!("生成的CUID: {}", id1);
    
    // 示例2: 生成短CUID
    println!("\n=== 短CUID示例 ===");
    let short_id = Cuid::short();
    println!("生成的短CUID: {}", short_id);
    
    // 示例3: 验证CUID有效性
    println!("\n=== CUID验证示例 ===");
    let test_ids = [
        "cln5wjr7e0000tk08h7b4x3w3",  // 有效CUID
        "invalid_id_123",            // 无效CUID
        short_id.as_str()            // 刚生成的短CUID
    ];
    
    for id in test_ids {
        if Cuid::is_valid(id) {
            println!("'{}' 是一个有效的CUID", id);
        } else {
            println!("'{}' 不是一个有效的CUID", id);
        }
    }
    
    // 示例4: 多线程生成CUID
    println!("\n=== 多线程生成示例 ===");
    let handles: Vec<_> = (0..3).map(|i| {
        thread::spawn(move || {
            let id = Cuid::new();
            println!("线程 {} 生成的CUID: {}", i, id);
        })
    }).collect();
    
    for handle in handles {
        handle.join().unwrap();
    }
}

功能特性

  • 生成符合CUID标准的唯一标识符
  • 提供短格式CUID(cuid2)生成
  • 高性能,适合分布式系统使用
  • 包含CUID验证功能

文档

更多详细使用方法和API文档可以参考官方文档。

许可证

该项目使用MIT许可证。


1 回复

Rust唯一ID生成库cuid-util使用指南

介绍

cuid-util是一个Rust实现的唯一ID生成库,基于CUID(可扩展的唯一标识符)规范。它为分布式系统提供高性能的唯一标识符生成功能。

安装

在Cargo.toml中添加依赖:

[dependencies]
cuid-util = "0.1"

基本使用示例

生成简单CUID

use cuid_util::cuid;

fn main() {
    // 生成基本CUID
    let id = cuid().unwrap();
    println!("Generated CUID: {}", id); // 输出示例: clp6jz3p9000008lba8d7dnyh
}

生成CUID2(改进版本)

use cuid_util::cuid2;

fn main() {
    // 生成改进版CUID2
    let id = cuid2();
    println!("Generated CUID2: {}", id); // 输出示例: yh8k3o5m6p4q2r1s9t0uvwxyz
}

高级用法完整示例

use cuid_util::{cuid, cuid2};
use rand::rngs::StdRng;
use rand::SeedableRng;
use actix_web::{get, App, HttpResponse, HttpServer, Responder};

// 自定义长度ID生成
fn custom_length_id() {
    let id = cuid2().with_length(10).generate();
    println!("10字符长度的CUID2: {}", id);
}

// 使用自定义随机数生成器
fn custom_rng_id() {
    let mut rng = StdRng::seed_from_u64(42);
    let id = cuid().with_rng(&mut rng).generate().unwrap();
    println!("自定义RNG生成的CUID: {}", id);
}

// Web服务端点
#[get("/id")]
async fn generate_id() -> impl Responder {
    let id = cuid2();
    HttpResponse::Ok().body(id)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    // 演示各种ID生成方式
    let basic_id = cuid().unwrap();
    println!("基本CUID: {}", basic_id);
    
    let cuid2_id = cuid2();
    println!("CUID2: {}", cuid2_id);
    
    custom_length_id();
    custom_rng_id();
    
    // 启动Web服务
    println!("启动Web服务,访问 http://localhost:8080/id 获取ID");
    HttpServer::new(|| App::new().service(generate_id))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

性能优化建议

  1. 对于高并发场景,推荐使用CUID2版本
  2. 考虑在多线程环境中重用生成器实例
  3. 极高吞吐量系统可预先生成ID池

注意事项

  • CUID与UUID格式不同,不能混用
  • 默认ID长度在24-30个字符之间
  • 生产环境建议进行性能测试
回到顶部