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

2022-08-29 10:24:13 字數 1250 閱讀 6011

public class idworker

if (datacenterid > maxdatacenterid || datacenterid < 0)

this.workerid = workerid;

this.datacenterid = datacenterid;

}// ******************************methods****************************************==

/*** 獲得下乙個id (該方法是執行緒安全的)

* @return snowflakeid

*/public synchronized long nextid()

//如果是同一時間生成的,則進行毫秒內序列

if (lasttimestamp == timestamp)

}//時間戳改變,毫秒內序列重置

else

//上次生成id的時間截

lasttimestamp = timestamp;

//移位並通過或運算拼到一起組成64位的id

return ((timestamp - twepoch) << timestampleftshift) //

| (datacenterid << datacenteridshift) //

| (workerid << workeridshift) //

| sequence;

}/**

* 阻塞到下乙個毫秒,直到獲得新的時間戳

* @param lasttimestamp 上次生成id的時間截

* @return 當前時間戳

*/protected long tilnextmillis(long lasttimestamp)

return timestamp;

}/**

* 返回以毫秒為單位的當前時間

* @return 當前時間(毫秒)

*/protected long timegen()

//******************************test*********************************************

/** 測試 */

public static void main(string args)

system.out.println(system.currenttimemillis() - start);

}}

Twitter的分布式自增ID演算法

乙個唯一 id 在乙個分布式系統中是非常重要的乙個業務屬性,其中包括一些如訂單 id,訊息 id 會話 id,他們都有一些共有的特性 全域性唯一很好理解,目的就是唯一標識某個次請求,某個業務。通常有以下幾種方案 可以利用mysql中的自增屬性auto increment來生成全域性唯一 id,也能保...

SnowFlakeId 分布式雪花id演算法

package com.jn.baseservice.utils import com.jn.baseservice.common.number import lombok.getter import lombok.setter import lombok.extern.log4j.log4j2 i...

自增ID演算法snowflake 雪花

在資料庫主鍵設計上,比較常見的方法是採用自增id 1開始,每次加1 和生成guid。資料庫自增主鍵保證唯一性,但在分布式系統中,部署需要考慮的因素太多 guid設計簡單,能保證主鍵的唯一性,分布式系統中,資料庫部署也簡單,只是guid是一串無物理意義的字串,大量資料查詢的時候效率相對會打折,儲存暫用...