Hutool裏的生成唯一Id唯的工具類

目錄

一、介紹

二、使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章