为什么会生成相同的uuid

想使用uuid作为帖子的唯一标识,但是同一个用户发起多个请求,得到的uuid是相同的,这样下来就乱套了,这是为什么呢?

数据库

为什么会生成相同的uuid

代码

为什么会生成相同的uuid

讨论数量: 5

不知道你用的那个UUID生成库,这种涉及到时间戳问题我感觉,超高并发情况下可能出现纳秒级重叠。

1年前 评论
Scrooge (楼主) 1年前

与uuid本身没关系,十有八九你入库姿式不对。

1年前 评论
Scrooge (楼主) 1年前

UUID(通用唯一标识符)是一种用于标识数据对象的标准化方法。使用不同的UUID生成算法,可以确保生成的UUID在理论上是唯一的。

根据您提供的代码,使用的是UUID版本1的生成算法。UUID版本1基于时间和MAC地址生成,前四个字节表示时间戳,后两个字节表示时钟序列,最后六个字节表示计算机的全球唯一标识(MAC地址)。这种生成方式在相同的设备上进行快速连续生成时,可能会生成相同的UUID。

如果多个请求在非常短的时间内由同一个用户发起,并且使用UUID版本1生成算法,那么它们可能会得到相同的UUID,因为时间戳的精度有限。这可能导致唯一标识符不再是唯一的。

为了避免这种情况,您可以考虑使用UUID版本4的生成算法,它是一种基于随机性的算法,提供更高的唯一性。使用UUID版本4生成算法,即使在短时间内多次生成UUID,也能够获得不同的值。

以下是使用Go语言中github.com/google/uuid库生成UUID版本4的示例代码:

import (
  "github.com/google/uuid"
)

func generateUUID() string {
  uid := uuid.New()
  return uid.String()
}

使用UUID版本4生成的UUID在实践中具有非常高的唯一性,因此适合作为帖子的唯一标识符。

希望这可以解答您的疑问!如果您还有其他问题,请随时提问。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!