【工具类用法】Hutool里的生成唯一Id唯的工具类

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【工具类用法】Hutool里的生成唯一Id唯的工具类

一、介绍

在分布式环境中,唯一ID生成应用十分广泛,生成方法也多种多样,Hutool针对一些常用生成策略做了简单封装。

唯一ID生成器的工具类,涵盖了:

  • UUID
  • ObjectId(MongoDB)
  • Snowflake(Twitter)

二、使用

2.1 UUID

UUID全称通用唯一识别码(universally unique identifier),JDK通过java.util.UUID提供了 Leach-Salz 变体的封装。在Hutool中,生成一个UUID字符串方法如下:

//生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();
//生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();

说明Hutool重写java.util.UUID的逻辑,对应类为cn.hutool.core.lang.UUID,使生成不带-的UUID字符串不再需要做字符替换,性能提升一倍左右。

2.2 ObjectId

ObjectId是MongoDB数据库的一种唯一ID生成策略,是UUID version1的变种,详细介绍可见:服务化框架-分布式Unique ID的生成方法一览。

Hutool针对此封装了cn.hutool.core.lang.ObjectId,快捷创建方法为:

//生成类似:5b9e306a4df4f8c54a39fb0c
String id = ObjectId.next();
//方法2:从Hutool-4.1.14开始提供
String id2 = IdUtil.objectId();

2.3 Snowflake

分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。Twitter的Snowflake 算法就是这种生成器。

使用方法如下:

//参数1为终端ID
//参数2为数据中心ID
Snowflake snowflake = IdUtil.createSnowflake(1, 1);
// 有两种返回值类型
long id = snowflake.nextId();
String nextIdStr = snowflake.nextIdStr();

三、测试类

3.1 测试类

public class Test {
    public static void main(String[] args) {
        String simpleUUID = IdUtil.simpleUUID();
        System.out.println("simpleUUID ---------> " + simpleUUID);
        String fastSimpleUUID = IdUtil.fastSimpleUUID();
        System.out.println("fastSimpleUUID -----> " + fastSimpleUUID);
        String fastUUID = IdUtil.fastUUID();
        System.out.println("fastUUID -----------> " + fastUUID);
        String objectId = IdUtil.objectId();
        System.out.println("objectId -----------> " + objectId);
        String randomUUID = IdUtil.randomUUID();
        System.out.println("randomUUID ---------> " + randomUUID);
        Snowflake snowflake = IdUtil.createSnowflake(1, 1);
        String nextIdStr = snowflake.nextIdStr();
        long nextId = snowflake.nextId();
        System.out.println("nextIdStr ----------> " + nextIdStr);
        System.out.println("nextId -------------> " + nextId);
        Snowflake snowflake1 = IdUtil.getSnowflake(2, 2);
        String nextIdStr1 = snowflake1.nextIdStr();
        long nextId1 = snowflake1.nextId();
        System.out.println("nextIdStr1 ---------> " + nextIdStr1);
        System.out.println("nextId1 ------------> " + nextId1);
    }
}

3.2 测试结果

simpleUUID ----------> 0b28ddf56e23443eb5f1918ba7a44e5c

fastSimpleUUID -----> 097ed26444ec4c0893799f41514b952c

fastUUID --------------> 9e6dfcb4-7701-4f3b-be0e-3e36af56d888

objectId ----------------> 5e8c61c590608c7d18cac881

randomUUID ---------> 2d62f0af-cbdc-4e3d-aa56-f3d4e2740166

nextIdStr --------------> 1247484152861822976

nextId ------------------> 1247484152861822977

nextIdStr1 ------------> 1247484152920678400

nextId1 ----------------> 1247484152920678401

如图所示:

【参考资料】唯一ID工具——IdUtil:https://www.bookstack.cn/read/hutool/bfd2d43bcada297e.md


相关文章
|
应用服务中间件 nginx
iframe嵌套其他网站提示连接被拒绝
iframe嵌套其他网站提示连接被拒绝
3250 0
|
存储 NoSQL Java
Java如何生成序列号/订单号
Java如何生成序列号/订单号
1684 0
|
29天前
|
人工智能 运维 安全
Java领域AI Agent开发首选框架:Harness Agent特性、实战用法全面解读
在智能化技术全面渗透软件开发领域的当下,AI Agent智能体已经成为应用开发、业务流程自动化、系统运维、智能交互场景中的核心技术形态。Java作为企业级开发领域应用最广泛、生态最成熟的编程语言,长期占据后端服务、大型分布式系统、政企项目、金融业务系统等核心赛道。但在AI Agent技术落地过程中,传统Java开发模式却暴露出明显短板,原生语言体系缺少针对智能体调度、工具调用、多轮会话、任务编排的标准化组件,开发者想要从零搭建AI Agent应用,需要整合大量第三方组件、自主设计通信逻辑、封装模型调用接口,开发周期长、代码冗余度高、后期维护难度大。
339 0
|
前端开发 easyexcel Java
Java+EasyExcel实现文件导入导出,导入导出如此简单
项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件
16235 3
Java+EasyExcel实现文件导入导出,导入导出如此简单
BigDecimal保留两位小数
本文介绍了BigDecimal保留两位小数的三种方法:`setScale`、`DecimalFormat`和`String.format`。其中,`setScale`可设置保留规则并返回BigDecimal类型值;`DecimalFormat`通过匹配规则返回字符串类型值;`String.format`为字符串自带方法,同样返回字符串类型值。此外,文章还对比了四种保留小数规则(如`00.00`、`#0.00`等),总结出`#0.00`是最适用的规则。附有详细代码示例与控制台打印结果,便于理解与实践。
1923 18
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
Java 开发者 Spring
【SpringBoot 异步魔法】@Async 注解:揭秘 SpringBoot 中异步方法的终极奥秘!
【8月更文挑战第25天】异步编程对于提升软件应用的性能至关重要,尤其是在高并发环境下。Spring Boot 通过 `@Async` 注解简化了异步方法的实现。本文详细介绍了 `@Async` 的基本用法及配置步骤,并提供了示例代码展示如何在 Spring Boot 项目中创建与管理异步任务,包括自定义线程池、使用 `CompletableFuture` 处理结果及异常情况,帮助开发者更好地理解和运用这一关键特性。
2872 1
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
1202 1
Nacos配置中心
The requested URL could not be retrieved
The requested URL could not be retrieved
802 1
|
存储 关系型数据库 MySQL
在 MySQL 中使用 Insert Into Select
【8月更文挑战第11天】
7952 0
在 MySQL 中使用 Insert Into Select