本文目录
一、介绍
二、使用
2.1 UUID
2.2 ObjectId
2.3 Snowflake
三、测试类
3.1 测试类
3.2 测试结果
一、介绍
在分布式环境中,唯一的ID生成应用广泛,生成方法多种多样。Hutool简单包装了一些常见的生成策略。
唯一的ID生成器工具类别包括:
二、使用2.1 UUID
- UUID
- ObjectId(MongoDB)
- Snowflake(Twitter)
UUID全称通用唯一识别码(universally unique identifier),JDK通过java.util.提供UUID Leach-Salz 变体包装。在Hutool中生成UUID字符串的方法如下:
///生成的UUID是带-字符串,类似于a5c8a5e8-df2b-4706-bea4-08d09394 uuid = IdUtil.randomUUID();///生成不带-的字符串,类似于b17f24ff026d40949c85a24f4f375d42String simpleUUID = IdUtil.simpleUUID();
2.2 ObjectId说明Hutool重写java.util.UUID的逻辑对应类为CN.hutool.core.lang.UUID,使生成不带-的UUID字符串不再需要更换字符,性能提高了一倍左右。
Objectid是MongoDB数据库中唯一的ID生成策略 详细介绍version1的变种:服务框架-分布式Unique 列出了ID的生成方法。
为此,Hutool包装了cn.hutool.core.lang.ObjectId,快速创建方法如下:
//生成类似:5b9e306a4df4cf8c54a39fb0cstring id = ObjectId.next();//方法2:从Hutool-4.1.14开始提供String id2 = IdUtil.objectId();
2.3 Snowflake在分布式系统中,有一些场景需要使用全球唯一的ID。有时我们希望使用一个更简单的ID,并希望ID能够按时间有序地生成。TwitterSnowflake 算法就是这种生成器。
使用方法如下:
//参数1终端ID//参数2数据中心IDSnowflake snowflake = IdUtil.createSnowflake(1, 1);// longg有两种返回值类型 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 ----------> 0b28df56e243eb5f198 fastSimpleUUID -----> 97ed264ecec4089799f414 fastUUID --------------> 9e6dfcb4-7701-4f3b-be00e-3e36af56d888 objectId ----------------> 5e8c61c590608c7d18cac8 randomUUID ---------> 2d62f0af-cbdc-4e3d-aa56-f3d4e274 nextIdStr --------------> 1247484152861822976 nextId ------------------> 1247484152861822977 nextidstr1 ------------> 1247484152920678400 nextID1 ----------------> 1247484152920678401
如图所示:
唯一的ID工具[参考资料]——IdUtil:https://www.bookstack.cn/read/hutoolbfd2d43bcada297.md