【Java进阶篇】什么是UUID,能不能保证唯一?

在这里插入图片描述

什么是UUID,能不能保证唯一?

  • ✔️典型解析
    • ✔️优缺点
  • ✔️各个版本实现
    • ✔️V1.基于时间戳的UUID
    • ✔️V2.DCE(Distributed Computing Environment)安全的UUID
    • ✔️V3.基于名称空间的UUID(MD5)
    • ✔️V4.基于随机数的UUID
    • ✔️V5.基于名称空间的UUID(SHA1)
    • ✔️各个版本总结


✔️典型解析


UUID(Universally Unique ldentifier)全局唯一标识符,是指在一台机器上生成的数字,它的目标是保证对在同一时空中的所有机器都是唯一的。


UUID 的生成是基于一定算法,通常使用的是随机数生成器或者基于时间戳的方式,生成的 UUID 由32位16讲制数表示,共有 128 位(标准的UUID格式为: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(8-4-4-4-12),共32个字符)。


由于 UUID 是由 MAC 地址、时间戳、随机数等信息生成的,因此 UUID 具有极高的唯一性,可以说是几乎不可能重复,但是在实际实现过程中,UUID有多种实现版本,他们的唯一性指标也不尽相同。


UUID在具体实现上,有多个版本,有基于时间的UUID V1,基于随机数的 UUID V4 等。


Java中的 java.util.UUID 生成的UUIDV3V4两种:


在这里插入图片描述


✔️优缺点


UUID的优点就是他的性能比较高,不依赖网络,本地就可以生成,使用起来也比较简单。


但是他也有两个比较明显的缺点,那就是长度过长和没有任何含义。长度自然不必说,他有32位16进制数字。对于"550e8400-e29b-41d4-a716-446655440000" 这个字符由来说,我想任何一个程序员都看不出其表达的含义。一旦使用它作为全局唯一标识,就意味着在日后的问题排查和开发调试过程中会遇到很大的困难。


✔️各个版本实现


✔️V1.基于时间戳的UUID


基于时间的 UUID 通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性


但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址。


import java.util.UUID;public class Main {public static void main(String[] args) {long timestamp = System.currentTimeMillis();UUID uuid = UUID.nameUUIDFromBytes(Long.toString(timestamp).getBytes());System.out.println(uuid);}
}

在这个例子中,我们首先获取当前的时间戳(以毫秒为单位),然后将其转换为字符串。然后,我们将这个字符串转换为一个字节数组,并使用这个字节数组来生成一个 UUID。最后,我们打印出这个 UUID

然而,这个方法并不是基于时间戳生成唯一的 UUID ,因为UUID的生成是基于随机数和时间戳的。如果你需要基于时间戳生成唯一的UUID,你可能需要使用其他的方法,比如使用java.nio.file.attribute.FileTime类来获取一个更精确的时间戳,然后将其转换为UUID


✔️V2.DCE(Distributed Computing Environment)安全的UUID


和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIXUIDGID,这个版本的UUID在实际中较少用到。


✔️V3.基于名称空间的UUID(MD5)


基于名称的 UUID 通过计算名称和名称空间的 MD5 散列值得到。


这个版本的 UUID 保证了: 相同名称空间中不同名称生成的 UUID 的唯一性;不同名称空间中的 UUID 的唯一性;相同名称空间中相同名称的 UUID 重复生成得到的结果是相同的


✔️V4.基于随机数的UUID


根据随机数,或者伪随机数生成 UUID 。该版本 UUID 采用随机数生成器生成,它可以保证生成的 UUID 具有极佳的唯一性。但是因为基于随机数的,所以,并不适合数据量特别大的场景。


✔️V5.基于名称空间的UUID(SHA1)


和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。


✔️各个版本总结


可以简单总结一下,Version 1Version 2 这两个版本的UUID,主要基于时间和MAC地址,所以比较适合应用于分布式计算环境下,具有高度唯一性。


Version 3Version 5 这两种 UUID 都是基于名称空间的,所以在一定范围内是唯一的,而且如果有需要生成重复 UUID 的场景的话,这两种是可以实现的。


Version 4 这种是最简单的,只是基于随机数生成的,但是也是最不靠谱的。适合数据量不是特别大的场景下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311982.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python入门学习篇(十四)——模块文件操作

1 模块 1.1 理解 包: python中带有__init__.py文件的文件夹 模块: 文件名(不包含.py后缀),如python官方的time.py中time就是模块1.2 示例代码 import datetime# 调用datetime模块中的datetime类的now()方法 t datetime.datetime.now() # 格式化输出日期和时间 strftime(&qu…

【网络安全 | Misc】Ditf 安恒九月赛

正文 binwalk发现rar: 修改后缀,打开需要密码: 修改高度: 得到密码: StRe1izia得到一个流量包: 联系上文搜素png得到: 追踪流: 得到Base64代码: flag{Oz_4nd_Hir0_lov3_F…

Linux---进程控制

一、进程创建 fork函数 在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程,原进程为父进程 fork函数的功能: 分配新的内存和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统的进程列表中fork返…

SpringBoot 实现Execl 导入导出

1、引包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easy…

dll不能运行是什么意思,分享5种有效的修复方法

在计算机使用过程中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中一种常见的问题是“dll不能运行”。这个问题可能会影响到我们的正常使用&#xff0c;甚至导致某些软件无法启动。那么&#xff0c;“dll不能运行是什么意思”呢&#xff1f;dll文件丢失怎么恢复&am…

论文分享 | 利用单模态自监督学习实现多模态AVSR

以下文章来源于智能语音新青年 &#xff0c;作者ttslr 论文地址&#xff1a; https://aclanthology.org/2022.acl-long.308.pdf 代码仓库&#xff1a; https://github.com/LUMIA-Group/Leveraging-Self-Supervised-Learning-for-AVSR 训练一个基于Transformer的模型需要大量的…

21 UVM printer

uvm_printer 类提供了以不同格式打印 uvm_objects 的灵活性。我们已经讨论了使用 uvm_field_* 宏的 print() 方法&#xff0c;或者如果不使用 utils_begin/ end 宏&#xff0c;则编写 do_print() 方法。 UVM printer提供四种内置printer。 uvm_printeruvm_table_printeruvm_t…

【Redis-08】Redis主从复制的实现原理

在Redis中&#xff0c;可以通过slaveof命令或者设置slaveof选项实现两台Redis服务器的主从复制&#xff0c;比如我们有两个Redis机器&#xff0c;地址分别是 127.0.0.1:6379 和 127.0.0.1:6380&#xff0c;现在我们在前者上面执行&#xff1a; 127.0.0.1:6379 > SLAVEOF 12…

分布式技术之流量控制技术

文章目录 什么是流量控制&#xff1f;分布式系统流量控制策略漏桶策略令牌桶策略两种策略对比Sentinel 流量控制工作原理 什么是流量控制&#xff1f; 流量控制&#xff0c;如果学过计算机网络的话&#xff0c;第一反应肯定是网络传输中的流量控制。网络传输中的流量控制&…

【中南林业科技大学】计算机组成原理复习包括题目讲解(超详细)

来都来了点个赞收藏关注一下再走呗&#x1f339;&#x1f339;&#x1f339;&#x1f339; 第1章&#xff1a;绪论 1.冯诺依曼机特点&#xff0c;与现代计算机的区别 冯诺依曼计算机的基本思想是&#xff1a;程序和数据以二进制形式表示&#xff0c;存储程序控制。在计算机中&…

2023 AI开发者生态报告

随着人工智能技术的飞速发展&#xff0c;全球IT市场对AI的投入持续增长&#xff0c;预计到2027年将达到4236亿美元。中国作为AI领域的重要参与者&#xff0c;其投资规模预计将占全球的9%。在这样的背景下&#xff0c;2023年的《AI开发者生态报告》为我们揭示了人工智能时代的技…

数据结构,题目笔记

哈希表 线性探测再散列 【算法数据结构&#xff5c;哈希查找&#xff5c;哈希冲突&#xff5c;除留余数法&#xff5c;线形探测法&#xff5c;例题讲解】https://www.bilibili.com/video/BV1514y1P7BK?vd_source1a684a3a1b9d05485b3d6277aeeb705d 【二次探测再散列法】 【【…