目录UUID的核心特性UUID的版本UUID的用途示例代码(生成UUID)优缺点与其他ID方案的对比
UUID(通用唯一识别码,Universally Unique Identifier)是一种用于标识信息的128位唯一标识符标准,其目的是确保在分布式系统中无需中央协调即可生成全局唯一的ID。UUID的标准定义由RFC 4122规范,通常以32位十六进制数表示,由连字符分为五组(例如:550e8400-e29b-41d4-a716-446655440000)。
UUID的核心特性
唯一性
理论上,UUID在时间和空间上都是唯一的。即使在不同系统、不同时间生成的UUID,重复概率极低(几乎可忽略)。
例如,标准版本(v4)的UUID重复概率约为 (10^{-36})。
固定长度
始终为128位(16字节),无论版本如何。
无需中央授权
生成UUID不需要依赖中央服务器或数据库,适合分布式系统。
可读格式
通常表示为32个十六进制字符,分为5组:8-4-4-4-12(如 123e4567-e89b-12d3-a456-426614174000)。
UUID的版本
UUID有多个版本,根据生成方式不同划分:
版本
描述
生成方式
示例
v1
基于时间+MAC地址
时间戳 + 主机MAC地址
2f54a540-7e1a-11ec-90d6-0242ac120003
v2
DCE安全版本
基于v1,加入本地域标识符
(较少使用)
v3
基于MD5哈希
命名空间+名称的MD5哈希
6fa459ea-ee8a-3ca4-894e-db77e160355e
v4
随机生成
完全随机(122位随机性)
550e8400-e29b-41d4-a716-446655440000
v5
基于SHA-1哈希
命名空间+名称的SHA-1哈希
886313e1-3b8a-5372-9b90-0c9aee199e5d
最常用的是v4(随机生成),因其简单且无需额外输入;v3/v5适合需要确定性生成的场景(如相同输入生成相同UUID)。
UUID的用途
分布式系统:作为数据库主键、消息ID等,避免ID冲突。
文件/对象存储:为文件分配唯一名称(如AWS S3的对象键)。
会话标识:Web应用中的用户会话ID。
硬件标识:设备或芯片的唯一标识符。
示例代码(生成UUID)
Python:
import uuid
print(uuid.uuid4()) # v4随机UUID
JavaScript:
const { v4: uuidv4 } = require('uuid');
console.log(uuidv4());
Java:
import java.util.UUID;
UUID id = UUID.randomUUID(); // v4
优缺点
优点:
全局唯一,无需协调。
生成速度快,适合高并发。
缺点:
128位较长(相比自增ID),可能影响存储和索引效率。
无时序性(v4),难以按生成时间排序。
与其他ID方案的对比
ID类型
长度
唯一性
生成方式
示例
UUID
128位
全局唯一
分布式生成
550e8400-e29b-41d4-a716-446655440000
自增ID
通常32/64位
单数据库内唯一
中央数据库分配
1, 2, 3...
Snowflake
64位
分布式唯一
时间+机器ID+序列号
1293845760000000000
如果需要更短的唯一ID,可考虑ULID(时间排序友好)或Snowflake算法(如Twitter的64位ID),但UUID仍是通用性最强的方案。