Uvlio

Command Palette

Search for a command to run...

返回文章列表
技术文章

UUID 解释:版本、随机性、排序与安全使用

UUID 是一个 128 位标识符,设计目标是在不询问中央数据库“下一个编号”的情况下生成唯一 ID。它适合分布式系统、本地原型、导入、离线客户端和测试数据。但 UUID 并不都一样:有的随机,有的由名称派生,有的包含时间信息,有的更适合数据库排序。
limitcool 维护的 Uvlio 编辑团队2026-05-177 分钟阅读
主题封面开发工具UUID 生成器

UUID 解释:版本、随机性、排序与安全使用

解释 UUID 各版本、v4、v5、v7 的差异,以及 UUID 在应用设计中适合和不适合的场景。

文章主题预览
理解原理
检查边界
使用工具
关联工具
UUID 生成器
阅读重点
1理解原理
2检查边界
3使用工具

原创流程图

UUID 解释:版本、随机性、排序与安全使用

这张图由 Uvlio 为本文工作流生成,用来说明从输入检查到输出判断的基本路径。
1

理解原理

检查后再进入下一步

2

检查边界

检查后再进入下一步

3

使用工具

检查后再进入下一步

维护与复核
维护者:limitcool。阅读时可重点关注技术原理、处理边界、隐私风险和可验证事实。
UUID 的基本形状

常见 UUID 字符串由 32 个十六进制字符和连字符组成。连字符只是格式,底层值是 128 位。部分位表示版本和变体,剩余位根据版本承载随机、时间或哈希派生数据。空间巨大,所以强随机源下碰撞概率极低。

UUID v4 是经典随机选择

v4 基本由随机数组成,易理解,适合测试记录、请求 ID、临时对象和无需协调的分布式创建。弱点是排序:数据库索引收到随机值会跳跃写入。普通应用通常没问题,但写入量巨大时要考虑影响。

UUID v3 和 v5 是确定性的

v3 和 v5 在相同 namespace 与 name 下总会生成同一个 UUID。v3 使用 MD5,v5 使用 SHA-1。它们适合稳定映射,例如把产品 SKU、域名、文件路径或外部键映射为可重复 ID。代价是可预测性。

UUID v7 为时间排序设计

v7 把时间戳信息和随机位结合,让新 ID 通常排在旧 ID 后面。它适合日志、事件表和需要插入顺序的数据库。时间部分有运维价值,也可能暴露创建时间,公开 URL 中使用时应考虑。

UUID 与数据库性能

整数序列紧凑且天然有序,但需要中央协调,也可能暴露记录数量。UUID 无需协调,适合合并多系统数据,但更大、索引缓存友好性较差。时间有序 UUID 能缓解部分索引跳跃。

不要把 UUID 当密码

UUID 是标识符,不自动等于会话秘密、重置 token、API key 或能力 URL。随机 v4 难猜,但安全 token 还需要熵、过期、撤销、存储、日志纪律和授权检查。能命名行,不代表能授权访问。

实用选择指南

需要简单随机 ID 用 v4;需要从 namespace 和稳定名称生成可重复 ID 用 v5;需要按时间排序、方便日志或数据库写入时考虑 v7。避免把 v1 暴露给公众,尤其在硬件或时间隐私有顾虑时。

常见问题

两个 UUID v4 会碰撞吗?

理论上会,但强随机源和普通应用规模下概率极低。

UUID v7 总是比 v4 好吗?

不是。v7 适合时间排序有价值的场景,v4 在不需要排序时更简单。

UUID 可以放在 URL 里吗?

通常可以,但不能把 UUID 当授权。服务端仍需要正常权限检查。

为什么团队会用 UUID 而不是数据库自增?

UUID 可在入库前生成,适合离线客户端、分布式导入和多来源合并,也不直接暴露记录数。

UUID 能告诉我创建时间吗?

只有部分版本带时间信息。v7 可按时间排序,v4 是随机的。需要时间就显式存时间戳。