SnowFlake 生成全域性唯一id

2022-09-11 12:57:19 字數 1484 閱讀 8862

public

class

snowflakeutil

/*** 外部呼叫獲取snowflakeutil的例項物件,確保不可變

* *

@return

*/public

static

snowflakeutil get()

/*** 初始化構造,無參構造有參函式,預設節點都是0

*/public

snowflakeutil()

/*** 設定機器節點和資料中心節點數,都是 0-31

* *

@param

workerid

* @param

datacenterid

*/public snowflakeutil(long workerid, long

datacenterid)

if (datacenterid > maxdatacenterid || datacenterid < 0)

this.workerid =workerid;

this.datacenterid =datacenterid;

}/*** 執行緒安全的id生成方法

* *

@return

*/@suppresswarnings("all")

public

synchronized

long

nextid()

//如果上次生成時間和當前時間相同,在同一毫秒內

if (lasttimestamp ==timestamp)

} else

lasttimestamp =timestamp;

//最後按照規則拼出id 64位

//000000000000000000000000000000000000000000 00000 00000 000000000000

//1位固定整數 time datacenterid workerid sequence

return ((timestamp - twepoch) << timestampleftshift) | (datacenterid <| (workerid << workeridshift) |sequence;

}/** *

* @param

lasttimestamp

* @return

*/protected

long tilnextmillis(long

lasttimestamp)

return

timestamp;

}/*** 獲取當前的時間戳(毫秒)

* *

@return

*/protected

long

timegen()

/*** 獲取全域性唯一id

*/public

static

string getid()

}

生成全域性唯一ID

a庫 b庫 c庫支援同時寫入 a庫初始值為1,自增為3,獲取的值一次是1 4 7 b庫初始值為2,自增為3,獲取的值一次是2 5 8 c庫初始值為3,自增為3,獲取的值一次是6 6 9 獲取id時可從三庫輪詢獲取 此方法使用資料庫原有的功能,所以相對簡單 能夠保證唯一性 能夠保證遞增性 id 之間的...

C 生成全域性唯一Guid

在軟體開發中,我們經常需要乙個唯一標識來標識乙個物件,在 php中,可以用uuid來獲得全域性唯一的id,其實c 也內建了簡單的guid獲得辦法,猜想guid應該是本機的特徵以及執行的時間的乙個雜湊值,所以幾乎可以保證不會重複,如下 guid include include 生成guid const...

C 生成全域性唯一Guid

在軟體開發中,我們經常需要乙個唯一標識來標識乙個物件,在php中,可以用uuid來獲得全域性唯一的id,其實c 也內建了簡單的guid獲得辦法,猜想guid應該是本機的特徵以及執行的時間的乙個雜湊值,所以幾乎可以保證不會重複,如下 include include 生成guid const char ...