了解uuid

目录

一.认识 UUID

二.UUID 会耗尽吗

三.UUID 会重复吗

四.UUID 的版本

五.UUID的应用

六.java 如何生成UUID


一.认识 UUID

uuid是经过特定的算法得到的.

UUID 是 16 字节 128 位长的数字,通常以 36 字节的字符串表示,示例如下:

3F2504E0-4F89-11D3-9A0C-0305E82C3301(其中的字母是 16 进制表示,大小写不敏感)

  • 时间戳+UUID 版本号,分三段占前 16 个字符 (60bit+4bit),
  • Clock Sequence 号与保留字段,占 4 个字符 (13bit+3bit),(伪随机数)
  • 节点标识占后 12 个字符 (48bit)。(网卡MAC地址)

https://d33wubrfki0l68.cloudfront.net/97e3b0fc51900714e3b0e781e770249d8e69d65b/d3625/id_generator/uuid/1.png

二.UUID 会耗尽吗

重点:是全球所有电脑共用一个uuid,也就是说,是全球所有电脑共用这一个2的128次方这么多的uuid

全球100亿人,每人每年换一台电脑,需要28140年才能用完uuid的后12位的电脑标识符.

全球100亿人,每人一台电脑,每台电脑每秒产生1亿个uuid,那么需要1千年才能用完uuid前15位时间戳.

三.UUID 会重复吗

  • 103 万亿个 UUID 中找到重复项的概率是十亿分之一
  • 要生成一个冲突率达到 50% 的 UUID 至少需要生成 2.71∗100000032.71 * 1000000^32.71∗10000003 个 UUID

 结论是几乎不会重复 

四.UUID 的版本

UUID具有多个版本,每个版本的算法不同,应用范围也不同。

首先是一个特例--Nil UUID--通常我们不会用到它,它是由全为0的数字组成,如下:

00000000-0000-0000-0000-000000000000

UUID Version 1:基于时间的UUID

基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)。

UUID Version 2:DCE安全的UUID

DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

UUID Version 3:基于名字的UUID(MD5)

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID

根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。

UUID Version 5:基于名字的UUID(SHA1)

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

五.UUID的应用

 从UUID的不同版本可以看出,

Version 1/2适合应用于分布式计算环境下,具有高度的唯一性;

Version 3/5适合于一定范围内名字唯一,且需要或可能会重复生成UUID的环境下;

至于Version 4,我个人的建议是最好不用(虽然它是最简单最方便的)。

通常我们建议使用UUID来标识对象或持久化数据,但以下情况最好不使用UUID:

  • 映射类型的对象。比如只有代码及名称的代码表。
  • 人工维护的非系统生成对象。比如系统中的部分基础数据。

六.java 如何生成UUID

生成uuid的方法太多了,这里只介绍一种,就是java的jdk自带的生成版本4的uuid的方法.

import java.util.UUID;
----------------------------
public class GenerateUUID {public static void main(String[] args) {UUID uuid = UUID.randomUUID();String str = uuid.toString();// 去掉“-”String s = str.replaceAll("-", "");System.out.println(str);System.out.println(s);}
}

其余的生成uuid的方法请自行百度.


————————————————
原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42408447/article/details/118361541

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

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

相关文章

boardmix AI:让工作效率翻倍的AI智能在线白板软件!

随着ChatGPT热度的飙升,AI逐步深入到各个领域,尤其在技术领域,引发了一场AI的新浪潮,人们谈论的焦点都与AI有关。 AI工具不仅帮助企业节约了成本,还极大提高了生产力。那些尚未融入AI的行业和产品,有着被AI…

OSI 和 TCP/IP 网络分层模型详解(基础)

OSI模型: 即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。 OSI 七层模型 OS…

Windows环境部署安装Chatglm2-6B-int4

chatglm2-6B是最近比较火爆的大模型,可以在消费级显卡上部署使用,适合学习。但是一般人也不一定有那么高的硬件配置,所以部署个int4版本应该是大多数人的最好选择。我就在家里部署起了int4版本的chatglm2-6B,记录一下免得忘了。 …

【AST抽象语法树】结构分析及特性

什么是AST? AST译名抽象语法树(Abstract Syntax Tree),是一种用于表示源代码结构的数据结构。 它在编译器、解析器和静态代码分析等领域中被广泛使用。 AST结构分析 我们利用成熟的astexplorer来进行结构化的比较和分析。可以尝试登录以下网…

树 - 前缀树(Trie Tree)

树 - 前缀树(Trie Tree) 什么是前缀树前缀树的实现节点数据结构定义插入方法●非递归方式●递归方式 查询单词方法●非递归方式●递归方式 查询前缀方法●非递归方式●递归方式 前缀树的复杂度前缀树有哪些应用前缀树的压缩:基数树双数组Trie树(DoubleAr…

Spring Security安全配置

使用Spring Boot与Spring MVC进行Web开发时,如果项目引入spring-boot- starter-security依赖启动器,MVC Security 安全管理功能就会自动生效,其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。…

探讨ChatGPT的强化学习:AI学习与交互的未来

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

Python中的正则表达式是什么,如何使用正则表达式?

正则表达式是一种强大的文本模式匹配工具,它提供了一种灵活的方法来查找、替换和提取文本中特定模式的内容。Python中使用内置的re模块来处理正则表达式。 下面是使用正则表达式的基本步骤: 导入re模块:在使用正则表达式之前,首…

ES6基础知识八:你是怎么理解ES6中Proxy的?使用场景?

一、介绍 定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming) 元编程(Metaprogramming,又译超编程,是指某类计算…

ChatGPT和搜索引擎哪个更好用

目录 ChatGPT和搜索引擎的概念 ChatGPT和搜索引擎的作用 ChatGPT的作用 搜索引擎的作用 ChatGPT和搜索引擎哪个更好用 总结 ChatGPT和搜索引擎的概念 ChatGPT是一种基于对话的人工智能技术,而搜索引擎则是一种用于在互联网上查找和检索信息的工具。它们各自具…

kaggle新赛:Bengali.AI 语音识别大赛赛题解析

赛题名称:Bengali.AI Speech Recognition 赛题链接:https://www.kaggle.com/competitions/bengaliai-speech 赛题背景 竞赛主办方 Bengali.AI 致力于加速孟加拉语(当地称为孟加拉语)的语言技术研究。Bengali.AI 通过社区驱动的…

7p透明屏的制造过程复杂琐屑吗?

7p透明屏是一种新型的显示技术,它可以使屏幕变得透明,让用户可以透过屏幕看到背后的物体。这种技术在科幻电影中经常出现,但现在已经成为现实。 7p透明屏的工作原理是利用液晶显示技术和透明材料。液晶显示技术是一种通过控制液晶分子的排列…

【Qt】安装Qt 5.7.1 MSVC2013 64bit版本的说明

【Qt】安装Qt 5.7.1 MSVC2013 64bit版本的说明 1、背景2、安装Qt 5.7.13、运行Qt Creator 1、背景 刚开始Qt是C库,后来Qt发展就越来越强大了。后来Qt 发展成为一套跨平台C图形用户界面应用程序开发框架。 注意它不但可以开发GUI程序,而且也可用于开发非…

safari浏览器连调手机控制台闪退

仅仅对mac电脑 1、尝试清楚所有Safari缓存 打开Safari浏览器。 单击菜单栏中的Safari并打开“首选项” 选择“隐私”选项卡 单击管理网站数据 单击“全部删除”,然后单击下一个对话框中的“立即删除”进行确认2、清理系统缓存 :在 Finder 中&#xff…

【Linux】查看指定端口的UDP、TCP是否收到数据【2023.07.24】

简介 场景是终端上报数据给服务端,会有前端进行展示。通过wireshark看到终端给服务端发送数据了,但是UDP无法确定服务端是否正确收到,于是需要在Linux执行一些命令查看是否收到数据。 命令 这个命令会抓取发往或从端口12222的UDP数据报文。…

Python怎么将图片转换成base64编码

目录 什么是base64编码 Base64编码的特点 Base64编码的应用 Python怎么将图片转换成base64编码 什么是base64编码 Base64编码是一种将二进制数据转换为ASCII字符的编码方式。它是由MIME(Multipurpose Internet Mail Extensions)规范定义的&#xff0…

Golang中的协程(上)

Golang中的协程 1. 协程是什么?2. 为什么存在协程?3. 协程要怎么做?4. 协程会怎样?5. 协程的案例讲解6. 主线程和协程的执行顺序7. 主死从随的现象8. 如何开启多个协程 在Golang中,协程(Coroutine&#xff…

怎么清空回收站?3个方法轻松搞定!

有没有大佬知道该怎么清空回收站呀?想把回收站清空了不知道该如何操作!求一个清空方法!感谢大家啦! 电脑的回收站会为我们保存一些删除的数据,如果我们删除文件后意识到这些文件仍然是有用的,可以利用回收站…

HDFS文件系统中,Fsimage和Edits

一、概念 Fsimage镜像文件:元数据的一个持久化检查点,包含Hadoop文件系统中的所有目录和文件元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,是在DataNode加入集群的时候,NameNode询问DataNode得…

React.memo高阶组件

1、概念 React.memo 为高阶组件。 如果你的组件在相同 props 的情况下渲染相同的结果,那么你可以通过将其包装在 React.memo 中调用,以此通过记忆组件渲染结果的方式来提高组件的性能表现。这意味着在这种情况下,React 将跳过渲染组件的操作并…