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
}
性能优化建议
- 对于高并发场景,推荐使用CUID2版本
- 考虑在多线程环境中重用生成器实例
- 极高吞吐量系统可预先生成ID池
注意事项
- CUID与UUID格式不同,不能混用
- 默认ID长度在24-30个字符之间
- 生产环境建议进行性能测试