public class Snowflake extends Object implements Serializable
snowflake的结构如下(每部分用-分开):
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
第一位为未使用(符号位表示正数),接下来的41位为毫秒级时间(41位的长度可以使用69年)
然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点)
最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)
并且可以通过生成的id反推出生成时间,datacenterId和workerId
参考:http://www.cnblogs.com/relucent/p/4955340.html
Constructor and Description |
---|
Snowflake(Date epochDate,
long workerId,
long dataCenterId,
boolean isUseSystemClock) |
Snowflake(long workerId,
long dataCenterId)
构造
|
Snowflake(long workerId,
long dataCenterId,
boolean isUseSystemClock)
构造
|
Modifier and Type | Method and Description |
---|---|
long |
getDataCenterId(long id)
根据Snowflake的ID,获取数据中心id
|
long |
getGenerateDateTime(long id)
根据Snowflake的ID,获取生成时间
|
long |
getWorkerId(long id)
根据Snowflake的ID,获取机器id
|
long |
nextId()
下一个ID
|
String |
nextIdStr()
下一个ID(字符串形式)
|
public Snowflake(long workerId, long dataCenterId)
workerId
- 终端IDdataCenterId
- 数据中心IDpublic Snowflake(long workerId, long dataCenterId, boolean isUseSystemClock)
workerId
- 终端IDdataCenterId
- 数据中心IDisUseSystemClock
- 是否使用SystemClock
获取当前时间戳public Snowflake(Date epochDate, long workerId, long dataCenterId, boolean isUseSystemClock)
epochDate
- 初始化时间起点(null表示默认起始日期),后期修改会导致id重复,如果要修改连workerId dataCenterId,慎用workerId
- 工作机器节点iddataCenterId
- 数据中心idisUseSystemClock
- 是否使用SystemClock
获取当前时间戳public long getWorkerId(long id)
id
- snowflake算法生成的idpublic long getDataCenterId(long id)
id
- snowflake算法生成的idpublic long getGenerateDateTime(long id)
id
- snowflake算法生成的idpublic long nextId()
public String nextIdStr()
Copyright © 2021. All rights reserved.