🌐 ZH

🆔 UUID生成器

生成通用唯一标识符(UUID)。可创建用于数据库主键、API令牌、会话ID等场景的标准UUID。

版本信息

v1(基于时间戳)
基于MAC地址和时间戳,保证时间顺序。
v4(随机)
完全随机,最常用。
v7(可按时间戳排序)
基于时间戳可排序,最新标准。
指南

了解更多

01

1. 什么是UUID?

UUID(Universally Unique Identifier)即通用唯一标识符,是一种无需中央协调即可保证唯一性的128位标识符。它以8-4-4-4-12格式的十六进制表示(例如:550e8400-e29b-41d4-a716-446655440000),在全球任何地方生成都极难重复。它被广泛用于数据库主键、会话ID、文件名、API令牌等各种场景。UUID也称为GUID(Globally Unique Identifier),由RFC 4122标准定义。

02

2. 各UUID版本的特点比较

UUID共有5个版本,每个版本采用不同的生成方式。v1将MAC地址与时间戳结合以保证时间顺序,但因暴露MAC地址而存在安全风险。v4为完全随机生成,使用最广泛,不可预测性高。v7是2024年标准化的最新版本,可基于时间戳排序,有利于数据库索引。v2用于DCE安全,v3/v5基于命名空间,用于特殊用途。

03

3. UUID的使用场景

UUID在多种场景下都很有用。在分布式系统中,无需中央服务器即可生成唯一ID,具有出色的可扩展性。在数据库中,使用UUID作为主键而非自增ID,可以避免合并冲突。在微服务架构中,用于跟踪服务间的通信。此外,还广泛用于防止文件上传时的文件名冲突、生成临时令牌、事件跟踪以及日志关联分析等。

04

4. v1、v4、v7的选择指南

UUID版本的选择取决于需求。如果时间顺序很重要且可以接受暴露MAC地址,请选择v1。但MAC地址可用于追踪生成位置,存在隐私问题。如果安全性重要且不需要排序,v4是最佳选择。它完全随机、不可预测,且不会暴露个人信息。如果同时需要时间排序和安全性,则推荐v7。基于时间戳的排序可带来良好的数据库性能,并减少索引碎片。

05

5. UUID唯一性的保证原理

UUID的碰撞概率极低。以v4为例,122位是随机的,因此有2^122 = 5.3 x 10^36种可能的组合。即使每秒生成10亿个,要达到50%的碰撞概率也需要85年。v1通过时间戳(60位)和时钟序列(14位)保证基于时间的唯一性,并通过MAC地址(48位)保证基于空间的唯一性。v7将Unix时间戳(48位)和随机数(74位)结合,同时满足时间顺序和唯一性。

06

6. 在数据库中使用UUID

将UUID用作数据库主键有多项优势。在分布式环境中,每个节点无需中央ID生成器即可独立创建ID,具有出色的可扩展性。数据合并时不会出现ID冲突,且在URL中暴露时也无法按顺序猜测,因而在安全性上更有优势。不过也有缺点:UUID为16字节,比整数类型(4-8字节)更大,且v4的随机性可能降低索引性能。这种情况下使用v7,可按时间顺序排序,从而提升B-tree索引的性能。