UUID通用唯一识别码基础知识指南

UUID经常出现在数据库记录、订单编号、日志系统里,这里介绍它最基础的概念。

UUID的标准格式

通常写成32位十六进制数字,以连字符分成5组,形如"123e4567-e89b-12d3-a456-426614174000",本质上代表一个128比特的数值,分组只是为了方便阅读。

不需要中心化的分配机构

和数据库里从1开始递增的自增ID不同,UUID可以由任意设备或程序独立生成,不需要联网向某个中心节点申请,这对分布式系统中多个节点同时创建记录的场景特别有用。

最常用的版本4(随机)

版本4的UUID绝大部分比特由随机数填充,只有少数固定位用于标记版本和变体信息,它的唯一性完全依赖随机数值空间之大,而不依赖任何时间戳或设备信息。

其他版本各有用途

版本1结合了生成设备的网络标识和时间戳;版本3和版本5则是根据一个命名空间和名称,通过哈希算法确定性地生成,相同输入永远得到相同结果,常用于需要可重复生成同一UUID的场景。

"GUID"和UUID基本是一回事

GUID(全局唯一标识符)是微软体系里常用的叫法,概念和格式与UUID基本一致,实际使用中两个名词经常被互换使用。

为什么几乎不会重复

版本4的UUID大约有122比特是随机生成的,可能取值的数量级极其庞大。常被引用的说法是,即使每秒生成数十亿个UUID并持续多年,出现一次意外重复的概率也依然低到可以忽略,这远远超出普通应用场景实际会达到的生成量级。

用长度换取免协调的便利

UUID比简单的递增整数ID长得多,会占用更多存储空间,索引效率也会略有下降,但很多系统仍然愿意接受这个代价,因为它省去了多个服务之间协调分配ID的麻烦,在微服务和分布式架构中尤其常见。

常见问题

UUID可以直接当作密码或安全令牌使用吗?

正确生成的随机(版本4)UUID具有一定的随机性,但它在设计之初并不是作为加密安全的密钥,许多对安全性要求较高的场景仍然会优先选用专门的密码学安全随机数生成方式,而不是直接复用UUID。

知道UUID能反推出对应的数据内容吗?

不能。随机生成的UUID本身不携带与它标识的数据相关的任何信息,只是一个唯一的标签,UUID和实际数据之间的对应关系只存在于生成和存储它的系统内部。