public class IdUtil extends Object
1. 唯一性ID生成器:UUID、ObjectId(MongoDB)、Snowflake
Constructor and Description |
---|
IdUtil() |
Modifier and Type | Method and Description |
---|---|
static String |
fastSimpleUUID()
简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID
|
static String |
fastUUID()
获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID
|
static long |
getDataCenterId(long maxDatacenterId)
获取数据中心ID
数据中心ID依赖于本地网卡MAC地址。 |
static SeataSnowflake |
getSeataSnowflake()
获取默认的SeataSnowflake单例实例。
|
static SeataSnowflake |
getSeataSnowflake(long nodeId)
获取SeataSnowflake单例实例。
|
static long |
getSeataSnowflakeNextId()
简单获取SeataSnowflake 的 nextId
NodeId默认为DataCenterId |
static String |
getSeataSnowflakeNextIdStr()
简单获取SeataSnowflake 的 nextId
NodeId默认为DataCenterId |
static Snowflake |
getSnowflake()
获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 |
static Snowflake |
getSnowflake(long workerId)
获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 |
static Snowflake |
getSnowflake(long workerId,
long datacenterId)
获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 |
static long |
getSnowflakeNextId()
简单获取Snowflake 的 nextId
终端ID 数据中心ID 默认为根据PID和MAC地址生成 |
static String |
getSnowflakeNextIdStr()
简单获取Snowflake 的 nextId
终端ID 数据中心ID 默认为根据PID和MAC地址生成 |
static long |
getWorkerId(long datacenterId,
long maxWorkerId)
获取机器ID,使用进程ID配合数据中心ID生成
机器依赖于本进程ID或进程名的Hash值。 |
static String |
nanoId()
获取随机NanoId
|
static String |
nanoId(int size)
获取随机NanoId
|
static String |
objectId()
创建MongoDB ID生成策略实现
ObjectId由以下几部分组成: 1. |
static String |
randomUUID()
获取随机UUID
|
static String |
randomUUID7() |
static String |
simpleUUID()
简化的UUID,去掉了横线
|
public static String randomUUID()
public static String simpleUUID()
public static String fastUUID()
public static String fastSimpleUUID()
public static String randomUUID7()
public static String objectId()
1. Time 时间戳。 2. Machine 所在主机的唯一标识符,一般是机器主机名的散列值。 3. PID 进程ID。确保同一机器中不冲突 4. INC 自增计数器。确保同一秒内产生objectId的唯一性。
public static Snowflake getSnowflake(long workerId, long datacenterId)
snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年)
然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
workerId
- 终端IDdatacenterId
- 数据中心IDSnowflake
public static Snowflake getSnowflake(long workerId)
snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年)
然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
workerId
- 终端IDSnowflake
public static Snowflake getSnowflake()
snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年)
然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
Snowflake
IdConstants.DEFAULT_SNOWFLAKE
public static long getSnowflakeNextId()
public static String getSnowflakeNextIdStr()
public static String nanoId()
public static String nanoId(int size)
size
- ID中的字符数量public static long getDataCenterId(long maxDatacenterId)
此算法来自于mybatis-plus#Sequence
maxDatacenterId
- 最大的中心IDpublic static long getWorkerId(long datacenterId, long maxWorkerId)
此算法来自于mybatis-plus#Sequence
datacenterId
- 数据中心IDmaxWorkerId
- 最大的机器节点IDpublic static SeataSnowflake getSeataSnowflake()
该方法为静态方法,无需实例化对象即可调用。它返回的是一个默认配置的SeataSnowflake实例, 可以直接用于生成分布式ID。在应用程序中,如果未显式设置自定义的SeataSnowflake实例, 则会使用此默认实例。
IdConstants.DEFAULT_SNOWFLAKE
public static SeataSnowflake getSeataSnowflake(long nodeId)
该方法为静态方法,无需实例化对象即可调用。它返回的是一个自定义配置的SeataSnowflake实例, 可以用于生成具有特定节点ID的分布式ID。
nodeId
- 节点IDIdConstants.DEFAULT_SEATA_SNOWFLAKE
public static long getSeataSnowflakeNextId()
public static String getSeataSnowflakeNextIdStr()
Copyright © 2025. All rights reserved.