我想在java中生成基于时间的UUID - java.util.UUID.randomUUID()生成UUID版本4.如何生成版本1(基于时间)的UUID?是否有一个单独的库,或者它是Java 7 API中提供的一些,我错过了它.
fin*_*eep 10
使用com.eaio.uuid.UUID要非常小心,如果需要按当前时间以外的时间生成GUID,因为这将始终在给定时间内生成相同的UUID.因此,如果您的数据需要生成UUID,其中记录可能具有相同的时间,则会生成相同的UUID.
我们需要这个来为前面创建的记录生成UUID,同时也创建多个记录,我们试图通过尝试使用UUIDGen.createTime()来调整它.我们发现它有一个副作用来改变记录乱序的时间.如果后续创建请求的UUID时间戳早于先前请求,则最终会得到一个UUID基于先前请求的时间戳的a.
在完成所有分析之后,我们必须在创建UUID时简单地返回创建,这样我们就不必将其作为参数传递.无论我们UUID在以后生成哪种解决方案,每个解决方案都有一个缺点.
小智 10
String timeuuid = com.datastax.driver.core.utils.UUIDs.timeBased().toString();
Run Code Online (Sandbox Code Playgroud)
看看 https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/utils/UUIDs.html
这是使用开源项目UUID Creator生成基于时间的 UUID 的另一种方法:
UUID uuid = UuidCreator.getTimeBased();
Run Code Online (Sandbox Code Playgroud)
该库还可以生成按时间排序的 UUID,即 UUID v6。
UUID v6、v7 和 v8 是RFC 4122的建议补充内容。该草案正在GitHub 存储库中进行讨论。
v6 的实现可以在同一个UUID Creator库中找到。看这个例子:
UUID uuid = UuidCreator.getTimeOrdered();
Run Code Online (Sandbox Code Playgroud)
免责声明:我是 的主要贡献者uuid-creator。
FasterXML Java Uuid生成器(JUG)
https://github.com/cowtowncoder/java-uuid-generator
UUID uuid = Generators.timeBasedGenerator().generate();
Run Code Online (Sandbox Code Playgroud)
版本 1 UUID 实际上代表空间和时间中的一个点。
“空格”部分是从计算机的网络端口获取的MAC 地址,用于唯一标识 id 的生成位置(几乎是唯一的,网络硬件制造商在分配 MAC 地址时出现了一些臭名昭著的错误)。
“时间”部分是一个 60 位时间戳,它是自1582 年 10 月 15 日午夜以来的 100纳秒间隔数,协调世界时 (UTC)。
正如您所注意到的,Java 规范不需要版本 1 UUID 的实现。
大概这是因为可能泄露您的 MAC 地址和创建时刻的安全和隐私问题。
正如在其他答案中所见,有可用的第 1 版 UUID 的第 3 方实现。
在 Stack Overflow 上寻求图书馆推荐是题外话。所以我在姊妹网站Software Recommendations Stack Exchange上询问了问题Library to generate Version 1 UUIDs to be called from Java。
这里是这里和其他地方的其他答案中提到的实现的精简列表,这些实现似乎仍然受到积极支持。