首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 生成無連字符 UUID 的工具類:基於 java.util.UUID 的標準實現

     編輯:Java 相關知識

核心代碼

import java.util.UUID;

public class IdGenerator {
    /**
     * 生成 32 位無連字符 UUID(標準 UUID 去掉 '-')
     * 例:a1b2c3d4e5f67890123456789abcdef0
     */
    public static String generateId() {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

原理解析

  • UUID.randomUUID():基於加密級強偽隨機數生成器(SecureRandom)生成 版本 4(隨機)UUID,全局唯一概率極高(2^122 機率碰撞)。
  • toString():標準格式 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx(36 字符,含 4 個連字符)。
  • replace("-", ""):移除連字符得 32 位十六進制字符串,便於數據庫主鍵、分佈式 ID、文件名等場景。

擴展:其他常見 ID 生成策略對比

策略特點適用場景有序性依賴
UUID (v4)無中心、無協調、極低碰撞分佈式主鍵、臨時文件、追蹤 ID無序JDK 內置
Snowflake (Twitter)64bit 長整型、粗略有序、含時間戳高併發分佈式主鍵、MySQL 主鍵優化趨勢遞增自研/庫
NanoId短、URL 安全、可自定義字母表短鏈接、邀請碼、前端友好無序第三方庫
數據庫自增/序列嚴格遞增、強依賴 DB單體應用、小規模有序DB
ULID128bit、時間排序、Base32 編碼需時間排序的分佈式 ID可排序第三方庫

最佳實踐建議

  1. 數據庫主鍵:優先考慮 Snowflake/ULID(有序利於 B+ 樹索引),或 UUID v7(草案,時間有序)。純隨機 UUID 導致索引分裂、頁面碎片化,寫入效能下降。
  2. 業務唯一標識(訂單號、流水號):結合 時間戳 + 業務前綴 + 短隨機碼,可讀性強且便於排查。
  3. 線程安全:UUID.randomUUID() 內部使用 ThreadLocalRandom/SecureRandom,線程安全,可直接靜態方法調用。
  4. 性能敏感場景:若極高頻調用(百萬級/秒),可考慮預生成池或改用 ThreadLocalRandom 組合時間戳+計數器自研。

常見誤區

  • 誤以為 UUID 絕不重複:理論上有碰撞概率,極高併發核心業務建議落庫前 INSERT ... ON DUPLICATE KEY 兜底。
  • 用 new UUID(0,0) 或 nameUUIDFromBytes 產生業務 ID:前者全零無意義,後者基於命名空間+名字確定性生成(v3/v5),非隨機。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved