摘要:前面的理論基礎和位運算都了解了,下面我們來生成雪花算法的第一部分,也就是時間部分。這個時候就有一個問題了,如果我們系統的時鐘錯了會不會有問題會所以要做判斷而且系統的時鐘錯誤也是雪花算法的一個致命問題,所以要一定要保證服務器的系統時間正確。
前面的理論基礎和位運算都了解了,下面我們來生成雪花算法的第一部分,也就是時間部分。時間部分的邏輯起始很簡單,就是規定一個起始時間戳,然后用當前時間戳減去起始時間戳,這兩個數的差就是我們要的結果。簡單看一下代碼邏輯:
我們規定的起始時間是 2015-01-01 00:00:00 ,然后獲取當前時間,用當前時間減去起始時間,就是我們要的時間部分的數值。這個時候就有一個問題了,如果我們系統的時鐘錯了會不會有問題?會!所以要做判斷!而且系統的時鐘錯誤也是雪花算法的一個致命問題,所以要一定要保證服務器的系統時間正確。來看一下對時間戳的判斷:
定義了一個變量LAST_TIME_STAMP記為上次id的生成時間,每次生成都標記一下,所以這個時間一定是遞增的,如果系統時鐘除了問題,那么直接報異常。這是對系統時間錯誤的一個判斷和處理。
就這樣時間部分就生成了,現在看看還是很簡單的?,F在我們再來看雪花算法的時間范圍,由于時間共占有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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76133.html
摘要:雪花算法生成的最終結果其實就是一個類型的長整型數字,這是一個大前提算法所有的內容都是針對這個數字進行運算的。根據上面的理論可以開始學習雪花算法。 針對每個公司,隨著服務化演進,單個服務越來越多,數據庫分的越來越細,有的時候一個業務需要分成好幾個庫,這時候自增主鍵或者序列之類的主鍵id生成方式已經不再滿足需求,分布式系統中需要的是一個全局唯一的id生成規則。既然號稱在全局分布式系統中唯一...
摘要:前面的內容把雪花算法的時間部分和機器信息部分都生成了,下面來生成最后一部分,就是毫秒內的序列。這樣毫秒內的序列數就算獲取成功了。 前面的內容把雪花算法的時間部分和機器信息部分都生成了,下面來生成最后一部分,就是毫秒內的序列。什么意思呢?我們在生成時間部分獲取時間戳的時候,使用 long now = System.currentTimeMillis(); 獲取,是個毫秒級的時間戳,但是即...
摘要:原理的雪花算法,使用語言實現。生成的整體上按照時間自增排序,并且整個分布式系統內不會產生碰撞由和作區分,并且效率較高。據說每秒能夠產生萬個。 分布式系統中,有一些需要使用全局唯一ID的場景,這種時候為了防止ID沖突可以使用36位的UUID,但是UUID有一些缺點,首先他相對比較長,另外UUID一般是無序的。 有些時候我們希望能使用一種簡單一些的ID,并且希望ID能夠按照時間有序生成。 ...
摘要:雪花算法初步完成后,我們討論了幾個位運算的寫法,大家知道雪花算法一旦確定后,很多數字都是定死的,比如機器占多少位,或者時間向左位移多少,這些在算法具體邏輯確定后就不會變了。 雪花算法初步完成后,我們討論了幾個位運算的寫法,大家知道雪花算法一旦確定后,很多數字都是定死的,比如機器占多少位,或者時間向左位移多少,這些在算法具體邏輯確定后就不會變了。那么寫成最后的數字和用位運算計算出來有什么...
摘要:有些時候我們希望能使用一種簡單一些的,并且希望能夠按照時間有序生成。轉換成字符串后長度最多生成的整體上按照時間自增排序,并且整個分布式系統內不會產生碰撞由和作區分,并且效率較高。經測試每秒能夠產生萬個。 概述 分布式系統中,有一些需要使用全局唯一ID的場景,這種時候為了防止ID沖突可以使用36位的UUID,但是UUID有一些缺點,首先他相對比較長,另外UUID一般是無序的。 有些時候我...
閱讀 2897·2021-11-17 09:33
閱讀 3678·2021-11-16 11:42
閱讀 3498·2021-10-26 09:50
閱讀 1353·2021-09-22 15:49
閱讀 3051·2021-08-10 09:44
閱讀 3684·2019-08-29 18:36
閱讀 3941·2019-08-29 16:43
閱讀 2231·2019-08-29 14:10