什么是 UUID?

UUID(通用唯一标识符)是一个 128 位的标识符,保证在所有空间和时间上都是唯一的。UUID 表示为 32 个十六进制数字,以 8-4-4-4-12 的格式分成五组,用连字符分隔。

快速了解

全称通用唯一标识符
创建时间1980 年代(2005 年在 RFC 4122 中标准化)
规范文档官方规范

工作原理

UUID 使用结合各种唯一性来源(如时间戳、随机数和硬件地址)的算法生成。有几个版本:版本 1 使用时间戳和 MAC 地址,版本 4 使用随机数(最常用),版本 5 使用命名空间和名称进行 SHA-1 哈希。生成重复 UUID 的概率极低,在实际应用中被认为是不可能的。UUID 广泛用于需要唯一标识符但无需中央协调的分布式系统中。

主要特点

  • 128 位长度,提供 2^128 种可能的值
  • 标准化格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  • 多个版本适用于不同用例(v1、v4、v5 等)
  • 可以在没有中央权威的情况下生成
  • 碰撞概率在实际应用中可以忽略不计
  • 不区分大小写(大写和小写等效)

常见用途

  1. 分布式系统中的数据库主键
  2. Web 应用中的会话标识符
  3. 文件和资源命名
  4. 微服务中的事务 ID
  5. 设备标识

示例

loading...
Loading code...

常见问题

UUID 和 GUID 有什么区别?

UUID(通用唯一标识符)和 GUID(全局唯一标识符)本质上是同一个东西 - 都是具有相同格式的 128 位标识符。GUID 是 Microsoft 在 Windows 和 .NET 中使用的术语,而 UUID 是在大多数其他上下文和官方 RFC 规范中使用的术语。它们完全兼容且可互换。

应该使用哪个 UUID 版本?

UUID v4(随机)是最常用的,由于其简单性和强唯一性,推荐用于一般用途。UUID v7(时间排序)非常适合数据库主键,因为它保持时间顺序并提高索引性能。UUID v1(时间戳 + MAC 地址)会暴露机器信息,所以现在不太常用。UUID v5 用于从命名空间和名称确定性生成。

UUID 碰撞真的会发生吗?

虽然理论上可能,但 UUID v4 碰撞实际上是不可能的。有 122 个随机位,你需要生成约 2.71 百亿亿个 UUID 才有 50% 的碰撞概率。换个角度看,每秒生成 10 亿个 UUID 需要约 85 年才能达到这个概率。在所有实际用途中,UUID 可以被认为是唯一的。

如何在不同编程语言中生成 UUID?

在 JavaScript 中:crypto.randomUUID() 或使用「uuid」npm 包。在 Python 中:import uuid; uuid.uuid4()。在 Java 中:UUID.randomUUID()。在 PHP 中:使用 Ramsey\Uuid\Uuid 或简单需求用 uniqid()。在 C# 中:Guid.NewGuid()。在 Go 中:使用 google/uuid 包。大多数现代语言都有内置或标准库支持 UUID 生成。

数据库主键应该使用 UUID 还是自增 ID?

两者都有权衡。UUID 更适合分布式系统(无需协调)、数据合并和安全性(ID 不可猜测)。自增 ID 空间效率更高、人类可读,且在 B 树索引中性能更好。UUID v7 通过时间排序提供了中间方案,具有更好的索引性能。对于分布式系统考虑使用 UUID,对于单数据库应用程序使用自增 ID。

相关工具

相关术语

相关文章