什么是UUID通用唯一识别码
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)。
- 通常表示为32个十六进制字符,分为5组:
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仍是通用性最强的方案。
Do not communicate by sharing memory; instead, share memory by communicating.

浙公网安备 33010602011771号