雪花演算法(04)機器資訊

2021-09-26 03:14:06 字數 1169 閱讀 1489

時間部分生成後,下一步是機器資訊,佔10位。我們這裡把機器資訊分成兩部分,一部分是資料中心id,佔5位,一部分是機器id,佔5位。這兩個id可以在部署專案的時候根據不同的機器自定義不同的id,這樣能人為的保障每個id都不同。比如:

/** 設定資料中心id為1 */

private static final long data_id = 1l;

/** 設定機器id為2 */

private static final long work_id = 2l;

也可以根據自己機器的情況自動生成,不過有很小很小的風險會重複,這個風險碰到的機率不大,當然如果能手動設定還是最好的。我們來說一下自己生成的情況。

我們的jdk庫中,有api可以獲取本地機器的hostname和hostaddress,我們來看一下:

我們來把hostname的資訊作為資料中心id,把hostaddress的資訊作為機器id,如何把兩個字串改為兩個數字id呢?其實很簡單。獲取字串的位元組陣列,然後把陣列的每個數字相加,對節點數的最大值取餘:

每個id的長度都是5,二進位制中5個1的最大值就是31,所以資料id和機器id每個的最大值也是31,下面是獲取兩個id的方法:

如果出現異常,返回乙個隨機數,保證id的可靠性。下面可以定義兩個的id了:

因為機器資訊分成了兩部分分別生成的,所以,要分別位移,資料id要向左位移17位,機器id要向左位移12位。正好佔據10位。

現在我們再來看下第二部分機器資訊的限制,這兩個id每個的值都佔五位,二進位制的值從 00000 到11111,整數的範圍就是0-31之間共32個。那麼雪花演算法可以部署的機器數就是32*32=1024個,這是機器資訊的限制,現在看這數字也是足足的夠了。注意如果自己給這兩個引數賦值,也要限制在31之內。

雪花演算法(04)機器資訊

時間部分生成後,下一步是機器資訊,佔10位。我們這裡把機器資訊分成兩部分,一部分是資料中心id,佔5位,一部分是機器id,佔5位。這兩個id可以在部署專案的時候根據不同的機器自定義不同的id,這樣能人為的保障每個id都不同。比如 也可以根據自己機器的情況自動生成,不過有很小很小的風險會重複,這個風險...

雪花演算法(04)機器資訊

時間部分生成後,下一步是機器資訊,佔10位。我們這裡把機器資訊分成兩部分,一部分是資料中心id,佔5位,一部分是機器id,佔5位。這兩個id可以在部署專案的時候根據不同的機器自定義不同的id,這樣能人為的保障每個id都不同。比如 設定資料中心id為1 private static final lon...

《演算法競賽高階指南》 雪花雪花雪花

有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3,ai,6...