什么是 UUID,完整入门指南
UUID 的定义
UUID(Universally Unique Identifier,通用唯一标识符)是一种 128 位(16 字节)的数字标识符,设计目标是在不依赖中央协调机构的情况下生成全球唯一的 ID。它通常以连字符分隔的十六进制形式表示:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,共 32 个十六进制字符 + 4 个连字符 = 36 个字符总长度。
一个典型的 UUID 例子:
550e8400-e29b-41d4-a716-446655440000
UUID 的历史背景
UUID 由 Apollo Computer 在 1980 年代初开发,最初用于分布式计算环境(Apollo Network Computing System)中识别网络对象。后来被 Open Software Foundation(OSF)纳入 DCE(分布式计算环境)规范,并最终以 RFC 4122 的形式成为 IETF 互联网标准。Microsoft 将其推广为 GUID(Globally Unique Identifier),本质上与 UUID 相同。
UUID 的结构
UUID 由 5 个分组组成:
- 第 1 组(8 个十六进制字符 = 32 位):与版本相关的数据
- 第 2 组(4 个字符 = 16 位):与版本相关的数据
- 第 3 组(4 个字符 = 16 位):高 4 位是版本号(1-5),低 12 位是数据
- 第 4 组(4 个字符 = 16 位):高 2-3 位是变体标识,低位是时钟序列
- 第 5 组(12 个字符 = 48 位):节点标识(通常是 MAC 地址或随机数)
UUID 的版本
RFC 4122 定义了 5 个 UUID 版本,2022 年新 RFC 草案(RFC 9562)又增加了版本 6、7、8:
- 版本 1:基于时间戳和 MAC 地址
- 版本 2:DCE Security UUID(实践中极少使用)
- 版本 3:基于 MD5 哈希的命名空间 UUID
- 版本 4:完全随机(最常用)
- 版本 5:基于 SHA-1 哈希的命名空间 UUID
- 版本 7(新):基于 Unix 毫秒时间戳的随机 UUID,可排序
UUID 的主要用途
UUID 在软件开发中广泛应用于:数据库主键(避免自增 ID 的顺序可预测性问题);分布式系统中跨节点的唯一 ID 生成(无需全局锁);API 请求的追踪 ID(request_id);文件名或资源命名(避免冲突);会话 ID 和令牌(但需要更强的安全性时应使用加密安全的随机数生成);日志关联标识符。
UUID 的优缺点
优点:全球唯一性(碰撞概率极低);无需中央协调机构;适合分布式系统;不泄露顺序信息(版本 4);标准化格式,跨语言跨平台支持好。缺点:36 字符比整数 ID 长很多,存储和传输开销更大;随机 UUID 的 B-Tree 索引性能较差(页分裂频繁);可读性差,人工调试不直观;版本 1 暴露 MAC 地址存在隐私风险。
何时使用 UUID,何时不用
推荐使用 UUID 的场景:分布式系统和微服务;需要在客户端生成 ID(不依赖服务器);需要避免暴露 ID 的顺序(如订单号不能被预测)。不推荐使用 UUID 的场景:单机小型应用(自增 ID 更简单高效);对数据库索引性能极为敏感的高写入场景(可考虑 UUID v7 或 ULID 替代);需要人类友好 ID 的场景(如短链接、邀请码)。
立即免费使用相关工具
免费使用 →