天天看點

使用java9的uuid生成方式,讓uuid生成速度提升一個檔次

簡介

UUID 的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要通過中央控制端來做辨識資訊的指定。

uuid 常用場景

  1. IOT 裝置,裝置号;
  2. 網站 sessionid,cookie 使用者id;
  3. 資料庫主鍵id;

uuid 生成工具

hutool Java工具包集 mica 基于 Spring、 java8 微服務工具集

壓測代碼

測試基于 JMH,是專門用于代碼微基準測試的工具套件,基于方法層面的基準測試,精度可以達到微秒級。

壓測代碼源碼存放于 github,感興趣的朋友可以:

https://github.com/lets-mica/mica-jmh

jdk8UUId

@Benchmark
public String jdk8UUId() {
    return UUID.randomUUID().toString();
}           

jdk8ThreadLocalRandomUUId

@Benchmark
public String jdk8ThreadLocalRandomUUId() {
    ThreadLocalRandom random = ThreadLocalRandom.current();
    UUID uuid = new UUID(random.nextInt(), random.nextInt());
    return uuid.toString();
}           

hutoolFastSimpleUUID

@Benchmark
public String hutoolFastSimpleUUID() {
    return IdUtil.fastSimpleUUID();
}           

micaUUId

@Benchmark
public String micaUUId() {
    return StringUtil.getUUID();
}           

壓測環境

  • OS: macOS Mojave
  • CPU: 2.8 GHz Intel Core i5
  • RAM: 8 GB 1600 MHz DDR3
  • JVM: Oracle 1.8.0_201 64 bits

壓測結果

Benchmark Score Error Units
734.595 17.220 ops/ms
3224.759 32.107
3619.748 67.195
micaUUId(java9 方式) 12375.405 241.879

說明:每毫秒生成的

uuid

數,得分越高越好。

總結

mica 由于參考(copy) java9 的 uuid 生成方式性能強勁,是 jdk8 ThreadLocalRandom 和 hutool FastSimpleUUID 的3到4倍的。

由于 uuid 的使用場景一般都需要高性能高并發,大家在使用的時候可以嘗試使用

java9+

或者參考他的算法去實作。

開源推薦