您好,登錄后才能下訂單哦!
前面的理論基礎和位運算都了解了,下面我們來生成雪花算法的第一部分,也就是時間部分。時間部分的邏輯起始很簡單,就是規定一個起始時間戳,然后用當前時間戳減去起始時間戳,這兩個數的差就是我們要的結果。簡單看一下代碼邏輯:
我們規定的起始時間是 2015-01-01 00:00:00 ,然后獲取當前時間,用當前時間減去起始時間,就是我們要的時間部分的數值。這個時候就有一個問題了,如果我們系統的時鐘錯了會不會有問題?會!所以要做判斷!而且系統的時鐘錯誤也是雪花算法的一個致命問題,所以要一定要保證服務器的系統時間正確。來看一下對時間戳的判斷:
定義了一個變量LAST_TIME_STAMP記為上次id的生成時間,每次生成都標記一下,所以這個時間一定是遞增的,如果系統時鐘除了問題,那么直接報異常。這是對系統時間錯誤的一個判斷和處理。
就這樣時間部分就生成了,現在看看還是很簡單的。現在我們再來看雪花算法的時間范圍,由于時間共占有41位,所以時間的數字范圍是有一個最大值的,寫成2進制就是41個1,比如我們的起始時間是2015-01-01 00:00:00,時間戳是1420041600000L,把41個1轉換成long類型數字,再加上這個時間戳數字,就是一個雪花算法最終的時間戳,轉換成時間就是2084-09-06 15:47:35,也就是這個41位時間的雪花算法最長使用69年9個月6天零15小時47分35秒,不過對于一個項目來說,這樣的限制不算限制,足足的夠用了。
代碼地址:https://gitee.com/blueses/snowflake-demo 03
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。