/**
* @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 該方法是執行緒安全的 ...