使用java9的uuid生成方式,让uuid生成速度提升一个档次

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 简介 UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。 uuid 常用场景 IOT 设备,设备号; 网站 sessionid,cookie 用户id; 数据库主键id; uuid 生成工具 hutool Java工具包集mica 基于 Spring、 java8 微服务工具集 压测代码 测试基于 JMH,是专门用于代码微基准测试的工具套件,基于方法层面的基准测试,精度可以达到微秒级。

简介

UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。

uuid 常用场景

  1. IOT 设备,设备号;
  2. 网站 sessionid,cookie 用户id;
  3. 数据库主键id;

uuid 生成工具

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
jdk8UUId 734.595 17.220 ops/ms
jdk8ThreadLocalRandomUUId 3224.759 32.107 ops/ms
hutoolFastSimpleUUID 3619.748 67.195 ops/ms
micaUUId(java9 方式) 12375.405 241.879 ops/ms

说明:每毫秒生成的 uuid 数,得分越高越好。

总结

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

由于 uuid 的使用场景一般都需要高性能高并发,大家在使用的时候可以尝试使用 java9+ 或者参考他的算法去实现。

开源推荐

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
分布式计算 Java Linux
Java 生成 UUID
Java 生成 UUID
9834 0
|
5月前
|
安全 Java
UUID太长怎么办?快来试试NanoId(Java版本)
UUID太长怎么办?快来试试NanoId(Java版本)
219 5
|
6月前
|
存储 Java
35、Java 中的 Math 类、Random 随机数、UUID、格式化字符串或数字、字符串和数字的相互转换、高精度计算、BigDecimal、计算机中的浮点数都是近似值
35、Java 中的 Math 类、Random 随机数、UUID、格式化字符串或数字、字符串和数字的相互转换、高精度计算、BigDecimal、计算机中的浮点数都是近似值
93 0
|
分布式计算 安全 算法
Java基础:UUID
作为开发人员大家对UUID应该都比较熟悉了,Java中也提供了相关的类和生成方法,供业务中使用。这里准备对UUID生成的过程做一次深入了解。
250 0
|
存储 安全 Java
Java类库StrringBuffer类、Math、SimpleDateFormat、Random随机数、大数字处理类和UUID 无重复数据(附带面试题)
1.StrringBuffer类 CharConsequnse接口,2.Math数学计算,3.Date日期处理类与SimpleDateFormat、4.Random随机数、5.大数字处理类、6.UUID 无重复数据
101 0
|
Java
Java的UUID简单生成方法
java的uuid简单生成
217 0
|
Java 数据库 数据安全/隐私保护
java中使用uuid(2)-处理数据库逻辑
当我们在建立数据库表的时候,需要有一定的规范,例如:每个表中都有一个自增的主键;密码不可以用明文,需要加密;有的字段不可为NULL;那么,有一个自我唯一标识的字段是必不可少的。但是毕竟不是所有业务都会有身份证标识,所以uuid是比较通用的一个技术。在数据库表中,需要生成一个唯一 ID 来标识字段的唯一性,所以就引入了uuid。答:现实中肯定有重名的人,不符合。可以看到,user_uuid是互相对应的,是一个唯一标识。如果以后要做一些业务的话,用uuid去做会比较好。2.那么,我们用身份证可以吗?
246 0
java中使用uuid(2)-处理数据库逻辑
|
算法 Java 数据库
如何在java中使用uuid(1)-随机uuid的获取
UUID是国际标准化组织ISO提出的一个概念。UUID是一个128比特的数值,这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。使用UUID的一个好处是可以为新的服务创建新的标识符。
410 0
如何在java中使用uuid(1)-随机uuid的获取
|
存储 Java
第35篇:Java 中的 Math 类、Random 随机数、UUID、格式化字符串或数字、字符串和数字的相互转换、高精度计算、BigDecimal、计算机中的浮点数都是近似值
✏️ java.lang.Math 类提供了常见的数学计算功能 ✏️ Math 类被 final 修饰(不能被继承) ✏️ Math 类不能被实例化
256 0
第35篇:Java 中的 Math 类、Random 随机数、UUID、格式化字符串或数字、字符串和数字的相互转换、高精度计算、BigDecimal、计算机中的浮点数都是近似值
Java UUID的生成,不重复
uuid的生成方式有很多,这里是一个尽可能的生成不重复的uuid.
530 0