publicclass
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 ...