摘要:前面的內容把雪花算法的時間部分和機器信息部分都生成了,下面來生成最后一部分,就是毫秒內的序列。這樣毫秒內的序列數(shù)就算獲取成功了。
前面的內容把雪花算法的時間部分和機器信息部分都生成了,下面來生成最后一部分,就是毫秒內的序列。什么意思呢?我們在生成時間部分獲取時間戳的時候,使用 long now = System.currentTimeMillis(); 獲取,是個毫秒級的時間戳,但是即使是這么短的時間,對于電腦來說也足夠生成很多個id,所以很多id可能會在同一個毫秒內生成,也就是時間部分的數(shù)值一樣。這個時候就要讓同一個毫秒內生成的id加上數(shù)字序列標識,就是第三部分的序列。第三部分占的長度是12位,轉成整數(shù)值就是4095,所以最后一部分的范圍就是4095到0之間的數(shù)字。如果毫秒內訪問的數(shù)量超過了這個限制怎么辦?沒法解決,只能強制等到下一毫秒再生產id。這就是第三部分的作用。
下面先定義一個序列初始值:
序列由于和時間戳有關系,所以要加載時間戳真正開始使用之前:
上面的邏輯做了判斷,同一毫秒內就讓序列加1,超過4095,就強制獲取下一毫秒的值,等時間戳不是同一毫秒的時候,序列從新開始計算。看下如何強制獲取下一毫秒:
簡單粗暴,就是while循環(huán)等下一毫秒就可以。這樣毫秒內的序列數(shù)就算獲取成功了。
我們三大部分的數(shù)字都獲取成功了,最后直接位移加合并就行:
這樣雪花算法就寫完了,下面執(zhí)行一下測試:
是一個18位的long類型數(shù)字,確實是我們要的結果。等等!是不是有問題?如果此時多個線程訪問,會產生重復的id!現(xiàn)在的程序確實有多并發(fā)問題,需要加上鎖:
這樣我們的雪花算法算是初步完成了。基本也符合項目對唯一id的要求!現(xiàn)在的寫法和網上的例子還有些差別,下面我們講講差別相關的內容。
代碼地址:https://gitee.com/blueses/sno... 05
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76147.html
摘要:雪花算法初步完成后,我們討論了幾個位運算的寫法,大家知道雪花算法一旦確定后,很多數(shù)字都是定死的,比如機器占多少位,或者時間向左位移多少,這些在算法具體邏輯確定后就不會變了。 雪花算法初步完成后,我們討論了幾個位運算的寫法,大家知道雪花算法一旦確定后,很多數(shù)字都是定死的,比如機器占多少位,或者時間向左位移多少,這些在算法具體邏輯確定后就不會變了。那么寫成最后的數(shù)字和用位運算計算出來有什么...
摘要:序本文主要來聊聊分布式的生成方案。分布式的生成,以為代表的,系列算法采用的就是劃分命名空間并行生成的思路。 序 本文主要來聊聊分布式id的生成方案。 目標 業(yè)務系統(tǒng)需要什么樣的ID生成器中提出了幾點目標: 唯一性 時間相關 粗略有序 可反解 可制造 主要思路 對于每個標識,都需要有一個命名空間(namespace),來保證其相對唯一性。分布式的ID生成,以Twitter Snowf...
摘要:關于我為什么寫這篇文章是因為今天在做訂單模塊的時候看到之前的上描述的年月日用戶位企業(yè)位四位自增長數(shù)。背景對于其定訂單的生成。個人的看法是主要是唯一,其他關于業(yè)務方面的不是太太重要。自增實現(xiàn)了用于將的值遞增,并返回結果。 關于我為什么寫這篇文章是因為今天在做訂單模塊的時候,看到之前的PRD上描述的年月日+用戶id2位+企業(yè)id位+四位自增長數(shù)。然后竟被我反駁的突然改成了精確時間+4位自增...
摘要:有些時候我們希望能使用一種簡單一些的,并且希望能夠按照時間有序生成。轉換成字符串后長度最多生成的整體上按照時間自增排序,并且整個分布式系統(tǒng)內不會產生碰撞由和作區(qū)分,并且效率較高。經測試每秒能夠產生萬個。 概述 分布式系統(tǒng)中,有一些需要使用全局唯一ID的場景,這種時候為了防止ID沖突可以使用36位的UUID,但是UUID有一些缺點,首先他相對比較長,另外UUID一般是無序的。 有些時候我...
摘要:雪花算法生成的最終結果其實就是一個類型的長整型數(shù)字,這是一個大前提算法所有的內容都是針對這個數(shù)字進行運算的。根據上面的理論可以開始學習雪花算法。 針對每個公司,隨著服務化演進,單個服務越來越多,數(shù)據庫分的越來越細,有的時候一個業(yè)務需要分成好幾個庫,這時候自增主鍵或者序列之類的主鍵id生成方式已經不再滿足需求,分布式系統(tǒng)中需要的是一個全局唯一的id生成規(guī)則。既然號稱在全局分布式系統(tǒng)中唯一...
閱讀 829·2021-09-22 15:18
閱讀 1181·2021-09-09 09:33
閱讀 2758·2019-08-30 10:56
閱讀 1184·2019-08-29 16:30
閱讀 1488·2019-08-29 13:02
閱讀 1458·2019-08-26 13:55
閱讀 1643·2019-08-26 13:41
閱讀 1941·2019-08-26 11:56