溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hutool怎么實現(xiàn)雪花算法

發(fā)布時間:2021-12-31 16:59:54 來源:億速云 閱讀:418 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Hutool怎么實現(xiàn)雪花算法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

Hutool怎么實現(xiàn)雪花算法

如果在面試中被問及分布式唯一標(biāo)識,卻沒有答道雪花算法,那么就有點說不過去了.

關(guān)于分布式唯一標(biāo)識中的雪花算法,網(wǎng)絡(luò)上的介紹很多,它只是一個算法,可以用Python,Java等不同的語言實現(xiàn)它.即便是同一個語言,它的實現(xiàn)也有不同.

然而還有一個工具類,它就是

Hutool怎么實現(xiàn)雪花算法

<dependency>   <groupId>cn.hutool</groupId>   <artifactId>hutool-all</artifactId>   <version>5.4.2</version></dependency>

在它的內(nèi)部也實現(xiàn)和提供了雪花算法,在這里,我們就拿它作為講解雪花算法的案例.

cn.hutool.core.lang.Snowflake

最核心的方法就是下面這個

public synchronized long nextId() {   // 獲取當(dāng)前時間戳   long timestamp = genTime();   // lastTimestamp表示你的程序在最后一次獲取分布式唯一標(biāo)識的時間戳(ms)   // 一臺機器正常情況下,timestamp 是要大于 lastTimestamp的.如果timestamp < lastTimestamp表明服務(wù)器的時間有問題,存在時鐘后退.   if (timestamp < lastTimestamp) {       // 容忍2秒內(nèi)的時鐘后退       if(lastTimestamp - timestamp < 2000){           timestamp = lastTimestamp;      } else{           // 如果服務(wù)器時間有問題(時鐘后退) 報錯。           throw new IllegalStateException(StrUtil.format("Clock moved backwards. Refusing to generate id for {}ms", lastTimestamp - timestamp));      }  }
  if (timestamp == lastTimestamp) {       // 相同毫秒內(nèi),序列號自增       sequence = (sequence + 1) & sequenceMask;       // 同一毫秒的序列數(shù)已經(jīng)達(dá)到最大       if (sequence == 0) {           // 循環(huán)等待下一個時間           timestamp = tilNextMillis(lastTimestamp);      }  } else {// timestamp > lastTimestamp       // 不同毫秒內(nèi), 序列號置為0       sequence = 0L;  }
  lastTimestamp = timestamp;
  // 通過按位或?qū)⒏鱾€部分拼接起來   return ((timestamp - twepoch) << timestampLeftShift) // 時間戳部分       | (dataCenterId << dataCenterIdShift) // 數(shù)據(jù)中心部分       | (workerId << workerIdShift) // 機器標(biāo)識部分       | sequence; // 序列號部分}

“Hutool怎么實現(xiàn)雪花算法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI