生成UUID和自定义UUID算法

简介: 生成UUID和自定义UUID算法



一、什么是UUID?

  UUID是一个128位(16字节)长度的标识符,旨在唯一地标识信息和资源。它由32个十六进制数字组成,通常以5个部分分隔开来,形如“8-4-4-4-12”的字符串。UUID的独特性来自于其生成算法,基于时间戳、生成者的唯一标识符和硬件信息等多个因素。这使得UUID在极小概率下出现重复的可能性。

二、UUID的应用场景

  UUID在各种软件系统中都被广泛应用。在分布式系统中,每个节点可以使用UUID来唯一标识自己,从而避免了中心化的标识分配管理。在数据库系统中,UUID常用作主键,保证在分布式环境中记录的唯一性。此外,UUID还常用于构建唯一的会话标识、生成唯一的文件名、标记资源等场景。

三、UUID的优缺点

  优点之一在于,UUID能够在分布式系统中生成全局唯一标识,不依赖中心化的标识分配管理。另外,UUID的生成算法列入了时间戳等多个因素,使得冲突的概率大大降低。然而,UUID也存在缺点,其中最重要的是其长度较长、可读性较差,不适合直接作为用户可见的标识符。

四、生成UUID和自定义UUID算法

1.生成UUID(纯UUID)

代码:
package Huas;
import java.util.UUID;
public class UuidDemo {
    public static void main(String[] args) {
         String uuid = UUID.randomUUID().toString();
          System.out.println("uuid = "+uuid);
    }
}
打印:

2.自定义UUID算法

代码:
package Huas;
import java.util.UUID;
public class UuidDemo {
    public static void main(String[] args) {
      //1.生成一个以lyqy -开头的ID,并且把里面的 - 去掉
      String lyqy = "lyqy-" + UUID.randomUUID().toString().replaceAll("-","");
      System.out.println("lyqy = "+lyqy);
      //2.生成一个以 dx- 开头的ID
      String uuid = String.valueOf(UUID.randomUUID());
      String dx = "dx-";
      dx += uuid;
      System.out.println("dx   = "+dx);;
    }
}
打印:

3.自定义UUID进阶版

代码:
package Huas;
import java.util.Random;
import java.util.UUID;
public class UuidDemo {
  //自定义ALLOWED_CHARS,列举UUID可以出现在字符
  private static final String ALLOWED_CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  //自定义UUID长度
    private static final int UUID_LENGTH = 36;
    public static String generateUUID() {
        StringBuilder uuidBuilder = new StringBuilder(UUID_LENGTH);
        Random random = new Random();
        for (int i = 0; i < UUID_LENGTH; i++) {
            if (i == 8 || i == 13 || i == 18 || i == 23) {
                uuidBuilder.append('-');
            } else {
                uuidBuilder.append(ALLOWED_CHARS.charAt(random.nextInt(ALLOWED_CHARS.length())));
            }
        }
        return uuidBuilder.toString();
    }
    public static void main(String[] args) {
        String customUUID = generateUUID();
        System.out.println(customUUID+"\n"+"customUUID长度 = "+customUUID.length());
    }
}
打印:

解释:

  这段代码的作用是生成一个32位的UUID,并按照格式 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 进行分段,其中 X 代表由数字和字母组成的随机字符。

  首先,定义了一个常量 ALLOWED_CHARS,其中包含了所有允许出现的字符,包括数字、大写字母和小写字母。然后定义了常量 UUID_LENGTH,表示生成的UUID的长度。

   接下来,定义了一个 generateUUID() 方法,使用 StringBuilder 来构建UUID字符串。随机数生成器 Random 用来随机选择 ALLOWED_CHARS 中的字符拼接到 UUID 中。

   通过一个 for 循环,迭代长度为 UUID_LENGTH 的次数,其中 i 代表每次迭代的索引。在每次迭代中,如果索引 i 为 8、13、18 或 23,那么将"-"字符添加到 UUID 末尾,否则随机选择 ALLOWED_CHARS 中的字符添加到 UUID 末尾。

   最后,在 main() 方法中调用 generateUUID() 方法生成一个自定义格式的 UUID,并将其打印输出。

总结

  UUID作为一种用于生成唯一标识符的标准,在当今分布式系统和云计算的背景下显得尤为重要。它在各种场景中发挥着不可替代的作用,保证了分布式系统中各种信息的唯一性。同时,UUID也在一定程度上解决了分布式系统中唯一标识符的分配和管理问题。不过,在使用UUID时,我们也需要权衡其优缺点,并结合具体场景做出合理的选择。

相关文章
|
8月前
|
存储 算法 安全
全局唯一ID(自增ID、UUID、雪花算法)
一、介绍 系统唯一id是我们在设计阶段常常遇到的问题。在复杂的分布式系统中,几乎都需要对大量的数据和消息进行唯一标识。在设计初期,我们需要考虑日后数据量的级别,如果可能会对数据进行分库分表,那么就需要有一个全局唯一id来标识一条数据或记录。生成唯一id的策略有多种,但是每种策略都有它的适用场景、优点以及局限性。
|
9月前
|
存储 监控 算法
php开发实战分析(9):使用实现短地址的分享的解决方案(第三方短链接服务、数据库自增ID转换、自定义短地址生成算法、自增数字短码)
php开发实战分析(9):使用实现短地址的分享的解决方案(第三方短链接服务、数据库自增ID转换、自定义短地址生成算法、自增数字短码)
184 0
|
9月前
|
存储 运维 算法
UUID和雪花(Snowflake)算法该如何选择?
UUID和雪花(Snowflake)算法该如何选择?
192 0
|
10月前
|
算法 安全 Java
数据库如何合理生成主键:UUID、雪花算法
1.使用自增主键的弊端 首先在实际工程中我们很少用1,2,3......这样的自增主键,原因如下: 主键冲突 性能问题 安全问题 主键冲突: 比如我要跨数据库进行数据同步、或者在分布式系统中跨“分区”进行数据同步,不难想象,1,2,3......这种递增的单数字是极容易产生冲突的。
248 0
|
10月前
|
XML JSON 算法
计算机视觉,算法应用自定义数据集制作
计算机视觉,算法应用自定义数据集制作
|
11月前
|
负载均衡 算法 容灾
Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)
Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)
126 0
|
11月前
|
负载均衡 算法 Java
Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)
Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)
186 0
|
11月前
|
负载均衡 算法 Java
Spring Cloud Alibaba - 06 RestTemplate 实现自定义负载均衡算法
Spring Cloud Alibaba - 06 RestTemplate 实现自定义负载均衡算法
166 0
|
11月前
|
算法
白话Elasticsearch26-深度探秘搜索技术之function_score自定义相关度分数算法
白话Elasticsearch26-深度探秘搜索技术之function_score自定义相关度分数算法
69 0
|
12月前
|
算法 Java Scala
UUID的弊端以及雪花算法 下
UUID的弊端以及雪花算法 下

热门文章

最新文章