雪花演算法生成唯一ID

2021-10-11 11:37:07 字數 1973 閱讀 1117

/**

* @author ws

* @description: 雪花演算法生成唯一id

* @datetime 2020/6/26 10:07

*/public class snowflake

/*** 起始的時間戳(2020-05-27 00:00:00)

*/private final static long start_stamp = 1590508800000l;

/*** 每一部分占用的位數

*/private final static long sequence_bit = 12; //序列號占用的位數

private final static long machine_bit = 5; //機器標識占用的位數

private final static long data_center_bit = 5;//資料中心占用的位數

/*** 每一部分的最大值

*/private final static long max_data_center_num = -1l ^ (-1l << data_center_bit);

private final static long max_machine_num = -1l ^ (-1l << machine_bit);

private final static long max_sequence = -1l ^ (-1l << sequence_bit);

/*** 每一部分向左的位移

*/private final static long machine_left = sequence_bit;

private final static long data_center_left = sequence_bit + machine_bit;

private final static long timestamp_left = data_center_left + data_center_bit;

//單例模式

private static snowflake snowflake;

static

public static long getid()

private long datacenterid; //資料中心

private long machineid; //機器標識

private long sequence = 0l; //序列號

private long laststamp = -1l;//上一次時間戳

private snowflake(long datacenterid, long machineid)

if (machineid > max_machine_num || machineid < 0)

this.datacenterid = datacenterid;

this.machineid = machineid;

}/**

* 產生下乙個id

** @return

*/public synchronized long nextid()

if (currstamp == laststamp)

} else

laststamp = currstamp;

return (currstamp - start_stamp) << timestamp_left //時間戳部分

| datacenterid << data_center_left //資料中心部分

| machineid << machine_left //機器標識部分

| sequence; //序列號部分

}private long getnextmill()

return mill;

}private long getnewstamp()

}

ID 生成器 雪花演算法

我們的業務需求中通常有需要一些唯一的id,來記錄我們某個資料的標識 看圖理解 詳細的看 注釋 public class snowflakeidworker if datacenterid maxdatacenterid datacenterid 0 this.workerid workerid th...

訂單Id生成之雪花演算法

不跟你多bb,上張圖好說話 為什麼 是64位呢,因為返回值是long型別是64位,但是第一位是符號位不可用,所有只剩下63位 時間戳的長度,決定了該演算法使用的年限,時間戳記錄的不是當前時間戳,而是當前時間戳和和起始時間戳的差值,起始時間戳由程式設計師自己設定 41位 按如下公式計算可用時間約為 1...

分布式唯一ID自增(雪花演算法)

public class idworker if datacenterid maxdatacenterid datacenterid 0 this.workerid workerid this.datacenterid datacenterid methods 獲得下乙個id 該方法是執行緒安全的 ...