溫馨提示×

溫馨提示×

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

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

雪花算法(03)生成時(shí)間

發(fā)布時(shí)間:2020-07-17 02:38:13 來源:網(wǎng)絡(luò) 閱讀:325 作者:小布哥哥s 欄目:編程語言

前面的理論基礎(chǔ)和位運(yùn)算都了解了,下面我們來生成雪花算法的第一部分,也就是時(shí)間部分。時(shí)間部分的邏輯起始很簡單,就是規(guī)定一個(gè)起始時(shí)間戳,然后用當(dāng)前時(shí)間戳減去起始時(shí)間戳,這兩個(gè)數(shù)的差就是我們要的結(jié)果。簡單看一下代碼邏輯:

雪花算法(03)生成時(shí)間

我們規(guī)定的起始時(shí)間是 2015-01-01 00:00:00 ,然后獲取當(dāng)前時(shí)間,用當(dāng)前時(shí)間減去起始時(shí)間,就是我們要的時(shí)間部分的數(shù)值。這個(gè)時(shí)候就有一個(gè)問題了,如果我們系統(tǒng)的時(shí)鐘錯(cuò)了會不會有問題?會!所以要做判斷!而且系統(tǒng)的時(shí)鐘錯(cuò)誤也是雪花算法的一個(gè)致命問題,所以要一定要保證服務(wù)器的系統(tǒng)時(shí)間正確。來看一下對時(shí)間戳的判斷:

雪花算法(03)生成時(shí)間

定義了一個(gè)變量LAST_TIME_STAMP記為上次id的生成時(shí)間,每次生成都標(biāo)記一下,所以這個(gè)時(shí)間一定是遞增的,如果系統(tǒng)時(shí)鐘除了問題,那么直接報(bào)異常。這是對系統(tǒng)時(shí)間錯(cuò)誤的一個(gè)判斷和處理。

就這樣時(shí)間部分就生成了,現(xiàn)在看看還是很簡單的?,F(xiàn)在我們再來看雪花算法的時(shí)間范圍,由于時(shí)間共占有41位,所以時(shí)間的數(shù)字范圍是有一個(gè)最大值的,寫成2進(jìn)制就是41個(gè)1,比如我們的起始時(shí)間是2015-01-01 00:00:00,時(shí)間戳是1420041600000L,把41個(gè)1轉(zhuǎn)換成long類型數(shù)字,再加上這個(gè)時(shí)間戳數(shù)字,就是一個(gè)雪花算法最終的時(shí)間戳,轉(zhuǎn)換成時(shí)間就是2084-09-06 15:47:35,也就是這個(gè)41位時(shí)間的雪花算法最長使用69年9個(gè)月6天零15小時(shí)47分35秒,不過對于一個(gè)項(xiàng)目來說,這樣的限制不算限制,足足的夠用了。

代碼地址:https://gitee.com/blueses/snowflake-demo 03

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

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

AI