SpringBoot 雪花演算法工具類

2021-10-10 16:17:03 字數 1529 閱讀 1962

多用於生成訂單號

eg: 779281037489340416

package com.ldh.util;

public

class

snowflake

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()

public

snowflake()

// 生成id

public string getid()

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

/** 測試 */

public

static

void

main

(string[

] args)

*/}}

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

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

《演算法 雪花演算法》

一 概述 snowflake 演算法 是 twitter 開源的分布式 id 生成演算法。應用場景 高效能的產生不重複id,支援集群的橫向擴充套件。二 原理 其核心思想就是 使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上...

雪花演算法詳解

前言 雪花演算法是用來在分布式場景下生成唯一id的。敘述 雪花演算法簡單描述 最高位是符號位,始終為0,不可用。41位的時間序列,精確到毫秒級,41位的長度可以使用69年。時間位還有乙個很重要的作用是可以根據時間進行排序。10位的機器標識,10位的長度最多支援部署1024個節點。12位的計數序列號,...