public class IdUtil extends Object
1. 唯一性ID生成器:UUID、ObjectId(MongoDB)、Snowflake
ID相关文章见:http://calvin1978.blogcn.com/articles/uuid.html
Constructor and Description |
---|
IdUtil() |
Modifier and Type | Method and Description |
---|---|
static Snowflake |
createSnowflake(long workerId,
long datacenterId)
Deprecated.
此方法容易产生歧义:多个Snowflake实例产生的ID会产生重复,此对象在单台机器上必须单例,请使用
getSnowflake(long, long) |
static String |
fastSimpleUUID()
简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID
|
static String |
fastUUID()
获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID
|
static long |
getDataCenterId(long maxDatacenterId)
获取数据中心ID
数据中心ID依赖于本地网卡MAC地址。 |
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 |
simpleUUID()
简化的UUID,去掉了横线
|
public static String randomUUID()
public static String simpleUUID()
public static String fastUUID()
public static String fastSimpleUUID()
public static String objectId()
1. Time 时间戳。 2. Machine 所在主机的唯一标识符,一般是机器主机名的散列值。 3. PID 进程ID。确保同一机器中不冲突 4. INC 自增计数器。确保同一秒内产生objectId的唯一性。
参考:http://blog.csdn.net/qxc1281/article/details/54021882
@Deprecated public static Snowflake createSnowflake(long workerId, long datacenterId)
getSnowflake(long, long)
特别注意:此方法调用后会创建独立的Snowflake
对象,每个独立的对象ID不互斥,会导致ID重复,请自行保证单例!
snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年)
然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
参考:http://www.cnblogs.com/relucent/p/4955340.html
workerId
- 终端IDdatacenterId
- 数据中心IDSnowflake
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序号)
参考:http://www.cnblogs.com/relucent/p/4955340.html
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序号)
参考:http://www.cnblogs.com/relucent/p/4955340.html
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序号)
参考:http://www.cnblogs.com/relucent/p/4955340.html
Snowflake
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 String nanoId()
public static String nanoId(int size)
size
- ID中的字符数量public static long getSnowflakeNextId()
public static String getSnowflakeNextIdStr()
Copyright © 2024. All rights reserved.