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)
创建Twitter的Snowflake 算法生成器。
|
static String |
fastSimpleUUID()
简化的UUID,去掉了横线,使用性能更好的ThreadLocalRandom生成UUID
|
static String |
fastUUID()
获取随机UUID,使用性能更好的ThreadLocalRandom生成UUID
|
static Snowflake |
getSnowflake(long workerId,
long datacenterId)
获取单例的Twitter的Snowflake 算法生成器对象
分布式系统中,有一些需要使用全局唯一ID的场景,有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 |
static String |
objectId()
创建MongoDB ID生成策略实现
ObjectId由以下几部分组成: |
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
public static Snowflake createSnowflake(long workerId, long datacenterId)
特别注意:此方法调用后会创建独立的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
Copyright © 2021. All rights reserved.