Rust短UUID生成库short-uuid的使用,高效生成紧凑且URL安全的唯一标识符
以下是关于Rust短UUID生成库short-uuid的完整使用指南:
Rust短UUID生成库short-uuid的使用
short-uuid
是一个用于生成和转换标准UUID为更短或不同格式的Rust库,能够将标准UUID转换为更紧凑且URL安全的字符串格式。
安装方法
通过cargo安装:
cargo add short-uuid
或者在Cargo.toml中添加依赖:
[dependencies]
short-uuid = "0.2.0"
完整示例代码
use short_uuid::{short, ShortUuid, ShortUuidCustom, CustomTranslator};
use uuid::Uuid;
fn main() {
// ===== 1. 基本用法 =====
// 生成默认格式的短UUID (flickrBase58)
let short_uuid = ShortUuid::generate();
println!("[基本用法] 默认短UUID: {}", short_uuid);
// 使用宏生成短UUID
let macro_short = short!();
println!("[基本用法] 宏生成的短UUID: {}", macro_short);
// ===== 2. 自定义字母表 =====
// 定义自定义字母表(排除易混淆字符)
let custom_alphabet = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";
let translator = CustomTranslator::new(custom_alphabet).unwrap();
// 生成自定义格式的短UUID
let custom_short = ShortUuidCustom::generate(&translator);
println!("[自定义字母表] 生成的短UUID: {}", custom_short.to_string());
// ===== 3. UUID转换 =====
// 从标准UUID转换
let uuid = Uuid::new_v4();
println!("[UUID转换] 原始UUID: {}", uuid);
// 转换为默认短UUID
let from_uuid = ShortUuid::from_uuid(&uuid);
println!("[UUID转换] 默认短格式: {}", from_uuid);
// 转换为自定义短UUID
let custom_from_uuid = ShortUuidCustom::from_uuid(&uuid, &translator);
println!("[UUID转换] 自定义短格式: {}", custom_from_uuid.to_string());
// 从UUID字符串转换
let uuid_str = "3cfb46e7-c391-42ef-90b8-0c1d9508e752";
match ShortUuid::from_uuid_str(uuid_str) {
Ok(short) => println!("[字符串转换] 从字符串生成的短UUID: {}", short),
Err(e) => println!("[字符串转换] 错误: {}", e),
}
// 从字符串生成自定义格式短UUID
match ShortUuidCustom::from_uuid_str(uuid_str, &translator) {
Ok(short) => println!("[字符串转换] 自定义短UUID: {}", short.to_string()),
Err(e) => println!("[字符串转换] 错误: {}", e),
}
// ===== 4. 序列化示例 =====
#[cfg(feature = "serde")]
{
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
struct User {
id: ShortUuid,
name: String,
}
let user = User {
id: ShortUuid::generate(),
name: "Alice".to_string(),
};
let serialized = serde_json::to_string(&user).unwrap();
println!("[序列化] JSON序列化结果: {}", serialized);
}
}
使用说明
-
基本功能:
- 使用
ShortUuid::generate()
生成默认格式的短UUID - 使用
short!()
宏快速生成短UUID
- 使用
-
自定义格式:
- 通过
CustomTranslator
定义自己的字母表 - 使用
ShortUuidCustom
生成自定义格式的短UUID
- 通过
-
转换功能:
- 支持从标准UUID/UUID字符串转换
- 支持自定义格式的转换
-
序列化支持:
- 启用serde功能后支持直接序列化/反序列化
应用场景
- 生成短链接标识符
- 创建紧凑的API密钥
- 生成用户友好的唯一ID
- 需要URL安全字符串的任何场景
该库生成的短UUID具有以下特点:
- 比标准UUID更紧凑
- 默认采用URL安全的Base58编码
- 支持自定义编码格式
- 保持UUID的唯一性特性
1 回复
Rust短UUID生成库short-uuid使用指南
short-uuid
是一个Rust库,用于生成紧凑且URL安全的唯一标识符,它是标准UUID的短版本表示。
特性
- 将标准UUID(36字符)转换为更短的形式(22字符)
- URL安全(不包含特殊字符)
- 可逆转换(可以从短UUID恢复原始UUID)
- 高性能
安装
在Cargo.toml
中添加依赖:
[dependencies]
short-uuid = "0.1"
基本用法
生成短UUID
use short_uuid::ShortUuid;
fn main() {
// 从标准UUID生成短UUID
let short_uuid = ShortUuid::from_uuid(uuid::Uuid::new_v4());
println!("Short UUID: {}", short_uuid);
// 直接生成短UUID
let short_uuid = ShortUuid::generate();
println!("Generated short UUID: {}", short_uuid);
}
转换回标准UUID
use short_uuid::ShortUuid;
fn main() {
let short_str = "fE9AQEwSTuK4ZGTGdRZdkF";
let short_uuid = ShortUuid::from_string(short_str).unwrap();
let original_uuid = short_uuid.to_uuid();
println!("Original UUID: {}", original_uuid);
}
高级用法
自定义生成器
use short_uuid::{ShortUuid, CustomTranslator};
fn main() {
// 创建自定义字母表(必须包含64个唯一字符)
let custom_alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
let translator = CustomTranslator::new(custom_alphabet).unwrap();
// 使用自定义生成器
let custom_short_uuid = ShortUuid::generate_with_translator(&translator);
println!("Custom short UUID: {}", custom_short_uuid);
}
批量生成
use short_uuid::ShortUuid;
fn main() {
// 生成10个短UUID
let ids: Vec<String> = (0..10)
.map(|_| ShortUuid::generate().to_string())
.collect();
println!("Batch generated IDs: {:?}", ids);
}
完整示例代码
use short_uuid::{ShortUuid, CustomTranslator};
use uuid::Uuid;
fn main() {
// 基本用法示例
println!("=== 基本用法 ===");
// 示例1: 从标准UUID生成短UUID
let uuid = Uuid::new_v4();
let short_uuid = ShortUuid::from_uuid(uuid);
println!("标准UUID: {}", uuid);
println!("转换后的短UUID: {}", short_uuid);
// 示例2: 直接生成短UUID
let generated_short = ShortUuid::generate();
println!("直接生成的短UUID: {}", generated_short);
// 示例3: 转换回标准UUID
let short_str = generated_short.to_string();
let restored_short = ShortUuid::from_string(&short_str).unwrap();
let restored_uuid = restored_short.to_uuid();
println!("恢复的标准UUID: {}", restored_uuid);
// 高级用法示例
println!("\n=== 高级用法 ===");
// 示例4: 自定义生成器
let custom_alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";
let translator = CustomTranslator::new(custom_alphabet).unwrap();
let custom_short = ShortUuid::generate_with_translator(&translator);
println!("自定义字母表的短UUID: {}", custom_short);
// 示例5: 批量生成
let batch: Vec<String> = (0..5)
.map(|_| ShortUuid::generate().to_string())
.collect();
println!("批量生成的短UUID: {:?}", batch);
}
性能考虑
short-uuid
在性能上做了优化:
- 避免不必要的分配
- 使用高效的base64编码变体
- 零成本错误处理
对于需要极高吞吐量的场景,建议重用ShortUuid
实例或使用自定义生成器。
注意事项
- 短UUID虽然紧凑,但仍然是全局唯一的
- 默认生成的字符串是URL安全的
- 短UUID不是加密安全的随机数,如果需要安全性请考虑其他方案
这个库非常适合需要紧凑ID表示的Web应用、数据库键或任何需要人类可读但唯一标识符的场景。