什么是 “不会重复”
要理解 UUID 为什么不会重复,先来理解什么是 “不会重复”。
假设一个 ID 只有 6 种可能,比如一个骰子,那我们不会认为 ID 不会重复,投 2 次骰子就会经常碰到点数相同的情况。
如果一个 ID 有 365 中可能,比如人的生日是 365 天中的某一天,那么我们会感觉两个人生日相同的概率很小。这时重复的概率是 1/365,大概是 0.3% 。
但是,如果不是 2 个人,是 20 多个人,那么在 20 几个人中,有人生日相同的概率重复就很大了,概率会超过 50%,也就是说就会超过一半。
我们会感觉这辈子都不会被雷劈,因为一个人一生中被雷劈到的概率是 175 万分之一。这个 175 万分之一虽然不是 0,但是感觉已经和 0 没区别了。
我们也会感觉坐飞机是安全的,因为飞机出事的概率非常小,一次航班出事的概率大约是 500 万分之一,一个人如果一辈子天天做飞机,出事的概率也不到 1%
但是,如果一个人能活 1 万岁,如果他还天天坐飞机,那么他出事的概率就超过 50% 了。
由此来看,不可重复需要满足两个条件
-
重复的概率不是不为 0,而是非常小
-
不能是投 2 次骰子不重复,而是要一直投骰子,投很多次,仍然不会重复。
UUID 为什么不会重复
在 UUID 中 ID 数量是非常非常大的。大概是 2 的 128 次方,这个数已经大到我们感受不到它到底是多大。
随机生成 1000 万亿个 UUID,有两个 UUID 相同的概率才会勉强达到 100 万分之一。
1000 万亿个是什么概念呢?如果每天生成 100 亿个 UUID, 100 年后才会生成 1000 万亿个。
也就是说,可以简单的这样理解:如果一个系统中每天生成的 UUID 少于 100 亿个,那么这个系统 100 年内都完全不用担心 UUID 会重复。