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);
    }
}

使用说明

  1. 基本功能:

    • 使用ShortUuid::generate()生成默认格式的短UUID
    • 使用short!()宏快速生成短UUID
  2. 自定义格式:

    • 通过CustomTranslator定义自己的字母表
    • 使用ShortUuidCustom生成自定义格式的短UUID
  3. 转换功能:

    • 支持从标准UUID/UUID字符串转换
    • 支持自定义格式的转换
  4. 序列化支持:

    • 启用serde功能后支持直接序列化/反序列化

应用场景

  • 生成短链接标识符
  • 创建紧凑的API密钥
  • 生成用户友好的唯一ID
  • 需要URL安全字符串的任何场景

该库生成的短UUID具有以下特点:

  1. 比标准UUID更紧凑
  2. 默认采用URL安全的Base58编码
  3. 支持自定义编码格式
  4. 保持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实例或使用自定义生成器。

注意事项

  1. 短UUID虽然紧凑,但仍然是全局唯一的
  2. 默认生成的字符串是URL安全的
  3. 短UUID不是加密安全的随机数,如果需要安全性请考虑其他方案

这个库非常适合需要紧凑ID表示的Web应用、数据库键或任何需要人类可读但唯一标识符的场景。

回到顶部