v4 与 v7 对比
UUID v4 是 122 位纯随机数——经典之选,零信息泄露,无顺序。UUID v7 将 48 位 Unix 时间戳(毫秒)放在前面,后面是随机位:值可按创建时间排序,因此更适合作为数据库主键(插入局部性更好)和日志 ID(按时间排序)。自 RFC 9562 起,v7 成为新系统的推荐默认。
解码时间戳
在 v7 中,前 48 位是毫秒级的 Unix 时间戳。在 v1/v6 中,时间戳是自 1582-10-15 起以 100 纳秒为间隔计数的 60 位数值;解码器会重新拼接字段顺序,并将其转换为 UTC 时刻——可用于审计 ID 的生成时间(例如无需额外字段即可得知用户记录的创建时间)。
各版本一览
- v4——随机。适用于令牌、会话 ID 等任何对顺序无要求的场景。
- v7——时间可排序。适用于数据库主键、事件 ID、带时间语义的幂等键。
- v1——基于 MAC 地址(有隐私泄露风险);v6——重新排序的 v1。两者的解码方式相同。
- UUID 为 128 位;v4 的碰撞实际上不可能发生(2^122 空间)。
想要更短的可排序 ID?请看 ULID 生成器——26 个字符对比 36 个,思路相同。