UUID 为什么不会重复

798 阅读2分钟

什么是 “不会重复”

要理解 UUID 为什么不会重复,先来理解什么是 “不会重复”。

假设一个 ID 只有 6 种可能,比如一个骰子,那我们不会认为 ID 不会重复,投 2 次骰子就会经常碰到点数相同的情况。

如果一个 ID 有 365 中可能,比如人的生日是 365 天中的某一天,那么我们会感觉两个人生日相同的概率很小。这时重复的概率是 1/365,大概是 0.3% 。

但是,如果不是 2 个人,是 20 多个人,那么在 20 几个人中,有人生日相同的概率重复就很大了,概率会超过 50%,也就是说就会超过一半。

我们会感觉这辈子都不会被雷劈,因为一个人一生中被雷劈到的概率是 175 万分之一。这个 175 万分之一虽然不是 0,但是感觉已经和 0 没区别了。

我们也会感觉坐飞机是安全的,因为飞机出事的概率非常小,一次航班出事的概率大约是 500 万分之一,一个人如果一辈子天天做飞机,出事的概率也不到 1%

但是,如果一个人能活 1 万岁,如果他还天天坐飞机,那么他出事的概率就超过 50% 了。

由此来看,不可重复需要满足两个条件

  1. 重复的概率不是不为 0,而是非常小

  2. 不能是投 2 次骰子不重复,而是要一直投骰子,投很多次,仍然不会重复。

UUID 为什么不会重复

在 UUID 中 ID 数量是非常非常大的。大概是 2 的 128 次方,这个数已经大到我们感受不到它到底是多大。

随机生成 1000 万亿个 UUID,有两个 UUID 相同的概率才会勉强达到 100 万分之一。

1000 万亿个是什么概念呢?如果每天生成 100 亿个 UUID, 100 年后才会生成 1000 万亿个。

也就是说,可以简单的这样理解:如果一个系统中每天生成的 UUID 少于 100 亿个,那么这个系统 100 年内都完全不用担心 UUID 会重复。