有的时候需要自己生成UUID,同时这个UUID还具有一些业务相关性,例如机器属性,用户id属性等,所以这个uuid就需要我们自己来构造了。一般构造UUID都希望是全局唯一的,不管是单机还是分布式环境下,那么为了构造这个唯一的业务性UUID我们可以利用的特征值有哪些呢?
一:主机的host
String host = InetAddress.getLocalHost().getHostAddress();
如果没有配置过host 有可能得到的host是回环地址 127.0.0.1
二:主机的mac
Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
while(nis.hasMoreElements()) {
NetworkInterface ni = nis.nextElement();
byte mac[] = ni.getHardwareAddress();
String macHex = DatatypeConverter.printHexBinary(mac);
}
我这里没有用到自己写的任何类,DatatypeConverter也是jdk自带的 用于将byte转换到16进制的字符串格式,这个可以参见我之前的一篇文章
这里需要注意,当安装了多个虚拟网卡时,该选择哪一个,我是没找到特别好的方法可以选取物理网卡的
三:当前启动的进程id
String pid =ManagementFactory.getRuntimeMXBean().getName();
这里需要说明的是 pid构成方式为 pid@hostname 例如我得到的值是 117004@dikar ,你需要截取第一个为pid
四:精确到纳秒的时间
long time = System.nanoTime();
提醒如果不需要这么细,可以到 currentTimeMillis
也许有人认为上面这些已经足够了,其实在多线程高并发下,nanotime相同的多的是,而且这个精度实际没那么准确,所以还需要第5个来保证唯一性
五:原子性的计数器
AtomicLong count = new AtomicLong(-Long.MAX_VALUE);
long counter = count.incrementAndGet();
为了防止数据过大造成long的溢出,所以初始化使用了负得maxLong
特别提醒,针对只需要一次性获取的值,例如host mac pid等。这个可以存放进static变量中,因为这些数据的存取也是比较耗时间的。
分享到:
相关推荐
### JavaScript生成UUID的三种方法详解 #### 一、前言 在软件开发中,经常会遇到需要为特定的数据或对象分配唯一标识符的情况。UUID(通用唯一标识符)就是一种常用的解决方案,它能够确保生成的ID在空间和时间上...
这个类提供了多种生成UUID的方法,如`randomUUID()`,`nameUUIDFromBytes()`,`timestamp()`等。其中,`randomUUID()`是最常用的,它基于当前时间戳和随机数生成一个UUID,通常形式为“-”分隔的32个十六进制数字。...
在Java中,生成UUID主要通过`java.util.UUID`类提供的静态方法。`UUID.randomUUID()`是生成一个随机的UUID实例,它满足全局唯一性。然而,生成的UUID字符串通常是36个字符,包括16进制数字和短横线。为了得到32位的...
还有一种常见的做法是使用自定义的UUID,即在首次启动应用时生成一个随机的UUID并存储在设备的SharedPreferences或者其他持久化存储中。这样,即使设备的硬件标识发生变化,应用也可以保持对用户的识别。 在“UUID...
本篇文章将深入探讨如何利用`SSKeyChain`存储秘钥以及生成UUID,并讨论其在iOS应用开发中的应用。 一、SSKeychain库介绍 `SSKeychain`是由Sam Soffes开发的一个Objective-C库,它为iOS和macOS提供了易于使用的API,...
### 使用Hibernate形式生成UUID的算法解析 在Java开发领域,特别是使用Hibernate框架进行数据库操作时,唯一标识符(UUID)的生成是常见的需求之一。UUID(Universally Unique Identifier),即通用唯一识别码,是...
在这个函数中,首先定义了一个常量字符串`c`,包含四个字符"89ab",这些字符将用于生成UUID的第8位和第12位。然后初始化一个指针`p`指向`buf`的起始位置。 接下来是一个`for`循环,循环次数为16次,因为UUID由16个...
1. **JavaScript生成UUID的概念**: UUID是通用唯一识别码(Universally Unique Identifier)的缩写,它是一个128位的值,用于创建唯一标识符。在计算机系统中,UUID常用于生成具有唯一性的标识,如数据库记录、API...
在JavaScript(JS)中,生成UUID通常用于创建唯一的ID,比如在数据库操作、网页交互或者网络通信中。下面我们将详细讨论如何在JavaScript中生成UUID,以及在实际应用中的价值。 首先,我们来看一下提供的JS代码实例...
本文将详细介绍如何使用 Python 的 `uuid` 模块生成各种类型的 UUID,并给出实际应用示例。 #### 二、UUID简介 UUID 是一种 128 位的数字,用于确保跨时间和空间的唯一性。它通常表示为 32 个十六进制数字,每 4 位...
### VB生成GUID的相关知识点 #### 一、GUID简介 GUID(Globally Unique Identifier),即全局唯一标识符,是一种在时间和空间上具有唯一性的标识符。GUID常用于跨平台、跨语言的应用程序中,用来确保生成的数据...
- **uuid3() 和 uuid5()**:基于名字的散列值生成UUID。uuid3() 使用MD5散列算法,而uuid5() 使用更安全的SHA-1算法。这两个函数可以确保同一命名空间内不同名字的唯一性,以及不同命名空间之间的唯一性。 - **uuid4...
通过生成UUID作为元素的唯一标识,我们可以准确地选中和操作需要吸顶的表格元素,从而在用户滚动页面时保持表格标题的可见性。这样的实现方式不仅提高了代码的可复用性,也使得页面的交互更加友好。
这种方法通过结合机器的MAC地址、当前的时间戳以及一些随机数来生成UUID。虽然理论上可以保证全球范围内的唯一性,但由于它依赖于MAC地址,因此存在一定的安全性和隐私问题。在局域网环境中,可以考虑使用IP地址来...
在IT行业中,我们经常需要处理各种自动化任务,其中之一就是生成大量的唯一标识,如卡号或密码。"卡号密码批量生成器Smile"是一个专为此目的设计的工具,它能够帮助用户快速、高效地生成大批量的卡号和密码。这个...
4. `uuid5()`:基于命名空间和名字的SHA-1散列值生成UUID,与`uuid3()`类似,但使用了不同的哈希算法。 在将字符串转换为UUID时,可以使用`UUID()`构造函数。它可以接受几种不同的格式,如16进制字符串、包含破折号...
总结一下,PHP数组生成树的核心在于理解如何利用递归函数和关联数组来构建层次结构。通过将扁平化的一维数组转换为多维树结构,我们可以更好地管理和操作具有层级关系的数据。这个无限递归子类的源代码示例展示了...
在Java、Python等语言中都有内置库支持生成UUID。 2. **时间戳+随机数**: 结合当前时间戳(毫秒或微秒级别)和一定范围内的随机数可以创建唯一编码。但这种方法的唯一性依赖于生成请求的并发性和时间间隔,如果...
在文件中,找到名为 `server-id` 或 `server-uuid` 的行,将其值更改为刚刚生成的新UUID。 **步骤4:重启MySQL服务** 修改完成后,保存并退出编辑器,然后重启MySQL服务以使更改生效: ```bash service mysqld ...
本文将深入探讨分布式环境下ID生成的各种策略和技术细节。 #### 二、背景知识 在理解分布式ID生成之前,我们需要了解一些基本概念: - **集群(Cluster)**:由多台计算机组成的系统,这些计算机通过网络连接并...