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

摘要:
在Huool中,生成UUID字符串的方法如下follows://The生成的UUID是一个带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3Stringuuid=IdUtil randomUUID();//生成的字符串是一个不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42StringsimpleUUID=IdUtil。simpleUUID();解释Hutool重写java.util.UUID的逻辑。对应的类是cn.hutol.core.lang.UUID,它在生成不带-的UUID字符串时不需要替换字符,性能提高了大约两倍。

目录

一、介绍

二、使用

2.1 UUID

2.2 ObjectId

2.3 Snowflake

三、测试类

3.1 测试类

3.2 测试结果

一、介绍
在分布式环境中,唯一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
 
原文链接:https://blog.csdn.net/weixin_44299027/article/details/105371509

免责声明:文章转载自《【工具类用法】Hutool里的生成唯一Id唯的工具类》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORACLE 12C R2 RAC 安装配置指南postman使用之三:API请求和查看响应结果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NETCore Bootstrap Admin 通用后台管理权限 [2]: Blazor 版本介绍

前言 上一篇介绍过了前后台分离的 NET Core 通用权限管理系统 在这篇文章简要的介绍了 Bootstrap Admin 后台管理框架的一些功能。本篇文章带来的是微软最新出的 Blazor 版本的 NET Core 通用权限管理系统 Blazor 简介 至于 Blazor 是什么,Blazor 的优缺点小伙伴们可以自行在园子里搜索一下,相关介绍还是非常...

在springboot启动时给钉钉群发通知

1.因为springboot启动后会加载所用的配置文件,所以我们可以在main方法下写DingTalk的bean来注入DingTalk配置。 @ServletComponentScan public classApplication { //DingTalk Bean变量 private static String DING_TALK_U...

DEV控件GridControl常用属性设置(转)

1、 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2、 如何新增一条记录 (1)、gridView.AddNewRow() (2)、实现 gridView_InitNewRow 事件 3、如何解决 GridControl 记录能获取而没有显示出来的问题 gri...

008-多线程-基础-ThreadGroup线程组

线程组ThreadGroup表示一组线程的集合,一旦一个线程归属到一个线程组之中后,就不能再更换其所在的线程组。那么为什么要使用线程组呢?个人认为有以下的好处:方便统一管理,线程组可以进行复制,快速定位到一个线程,统一进行异常设置等。ThreadGroup它其实并不属于Java并发包中的内容,它是java.lang中的内容。但是掌握对其的于理解,在实际应用...

C#实现短链接生成服务

项目中有一处需求,需要把长网址缩为短网址,把结果通过短信、微信等渠道推送给客户。刚开始直接使用网上现成的开放服务,然后在某个周末突然手痒想自己动手实现一个别具特色的长网址(文本)缩短服务。 由于以前做过socket服务,对数据包的封装排列还有些印象,因此,短网址服务我第一反应是先设计数据的存储格式,我这里没有采用数据库,而是使用2个文件来实现: Url...

NET 环境中使用RabbitMQ

一 环境搭建 首先,由于RabbitMQ使用Erlang编写的,需要运行在Erlang运行时环境上,所以在安装RabbitMQ Server之前需要安装Erlang 运行时环境,可以到Erlang官网下载对应平台的安装文件。如果没有安装运行时环境,安装RabbitMQ Server的时候,会提示需要先安装Erlang环境。 安装完成之后,确保已经将Erla...