雪花算法(03)生成時間



前面的理論基礎和位運算都了解了,下面我們來生成雪花算法的第一部分,也就是時間部分。時間部分的邏輯起始很簡單,就是規定一個起始時間戳,然后用當前時間戳減去起始時間戳,這兩個數的差就是我們要的結果。簡單看一下代碼邏輯:
![](https://img2018.cnblogs.com/blog/1765723/201908/1765723-20190814161622297-1776847579.png)

我們規定的起始時間是 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM