亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

雪花算法(05)毫秒內(nèi)序列

時(shí)飛 / 2744人閱讀

摘要:前面的內(nèi)容把雪花算法的時(shí)間部分和機(jī)器信息部分都生成了,下面來(lái)生成最后一部分,就是毫秒內(nèi)的序列。這樣毫秒內(nèi)的序列數(shù)就算獲取成功了。



前面的內(nèi)容把雪花算法的時(shí)間部分和機(jī)器信息部分都生成了,下面來(lái)生成最后一部分,就是毫秒內(nèi)的序列。什么意思呢?我們?cè)谏蓵r(shí)間部分獲取時(shí)間戳的時(shí)候,使用 long now = System.currentTimeMillis(); 獲取,是個(gè)毫秒級(jí)的時(shí)間戳,但是即使是這么短的時(shí)間,對(duì)于電腦來(lái)說(shuō)也足夠生成很多個(gè)id,所以很多id可能會(huì)在同一個(gè)毫秒內(nèi)生成,也就是時(shí)間部分的數(shù)值一樣。這個(gè)時(shí)候就要讓同一個(gè)毫秒內(nèi)生成的id加上數(shù)字序列標(biāo)識(shí),就是第三部分的序列。第三部分占的長(zhǎng)度是12位,轉(zhuǎn)成整數(shù)值就是4095,所以最后一部分的范圍就是4095到0之間的數(shù)字。如果毫秒內(nèi)訪問(wèn)的數(shù)量超過(guò)了這個(gè)限制怎么辦?沒(méi)法解決,只能強(qiáng)制等到下一毫秒再生產(chǎn)id。這就是第三部分的作用。




下面先定義一個(gè)序列初始值:


序列由于和時(shí)間戳有關(guān)系,所以要加載時(shí)間戳真正開(kāi)始使用之前:


上面的邏輯做了判斷,同一毫秒內(nèi)就讓序列加1,超過(guò)4095,就強(qiáng)制獲取下一毫秒的值,等時(shí)間戳不是同一毫秒的時(shí)候,序列從新開(kāi)始計(jì)算。看下如何強(qiáng)制獲取下一毫秒:


簡(jiǎn)單粗暴,就是while循環(huán)等下一毫秒就可以。這樣毫秒內(nèi)的序列數(shù)就算獲取成功了。




我們?nèi)蟛糠值臄?shù)字都獲取成功了,最后直接位移加合并就行:


這樣雪花算法就寫完了,下面執(zhí)行一下測(cè)試:


是一個(gè)18位的long類型數(shù)字,確實(shí)是我們要的結(jié)果。等等!是不是有問(wèn)題?如果此時(shí)多個(gè)線程訪問(wèn),會(huì)產(chǎn)生重復(fù)的id!現(xiàn)在的程序確實(shí)有多并發(fā)問(wèn)題,需要加上鎖:



這樣我們的雪花算法算是初步完成了?;疽卜享?xiàng)目對(duì)唯一id的要求!現(xiàn)在的寫法和網(wǎng)上的例子還有些差別,下面我們講講差別相關(guān)的內(nèi)容。


代碼地址:https://gitee.com/blueses/sno... 05

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/76147.html

相關(guān)文章

  • 雪花算法(07)雪花算法最終版

    摘要:雪花算法初步完成后,我們討論了幾個(gè)位運(yùn)算的寫法,大家知道雪花算法一旦確定后,很多數(shù)字都是定死的,比如機(jī)器占多少位,或者時(shí)間向左位移多少,這些在算法具體邏輯確定后就不會(huì)變了。 雪花算法初步完成后,我們討論了幾個(gè)位運(yùn)算的寫法,大家知道雪花算法一旦確定后,很多數(shù)字都是定死的,比如機(jī)器占多少位,或者時(shí)間向左位移多少,這些在算法具體邏輯確定后就不會(huì)變了。那么寫成最后的數(shù)字和用位運(yùn)算計(jì)算出來(lái)有什么...

    piapia 評(píng)論0 收藏0
  • 分布式id生成方案概述

    摘要:序本文主要來(lái)聊聊分布式的生成方案。分布式的生成,以為代表的,系列算法采用的就是劃分命名空間并行生成的思路。 序 本文主要來(lái)聊聊分布式id的生成方案。 目標(biāo) 業(yè)務(wù)系統(tǒng)需要什么樣的ID生成器中提出了幾點(diǎn)目標(biāo): 唯一性 時(shí)間相關(guān) 粗略有序 可反解 可制造 主要思路 對(duì)于每個(gè)標(biāo)識(shí),都需要有一個(gè)命名空間(namespace),來(lái)保證其相對(duì)唯一性。分布式的ID生成,以Twitter Snowf...

    Terry_Tai 評(píng)論0 收藏0
  • 關(guān)于生成訂單號(hào)規(guī)則的一些思考

    摘要:關(guān)于我為什么寫這篇文章是因?yàn)榻裉煸谧鲇唵文K的時(shí)候看到之前的上描述的年月日用戶位企業(yè)位四位自增長(zhǎng)數(shù)。背景對(duì)于其定訂單的生成。個(gè)人的看法是主要是唯一,其他關(guān)于業(yè)務(wù)方面的不是太太重要。自增實(shí)現(xiàn)了用于將的值遞增,并返回結(jié)果。 關(guān)于我為什么寫這篇文章是因?yàn)榻裉煸谧鲇唵文K的時(shí)候,看到之前的PRD上描述的年月日+用戶id2位+企業(yè)id位+四位自增長(zhǎng)數(shù)。然后竟被我反駁的突然改成了精確時(shí)間+4位自增...

    omgdog 評(píng)論0 收藏0
  • 雪花算法 - snowflake

    摘要:有些時(shí)候我們希望能使用一種簡(jiǎn)單一些的,并且希望能夠按照時(shí)間有序生成。轉(zhuǎn)換成字符串后長(zhǎng)度最多生成的整體上按照時(shí)間自增排序,并且整個(gè)分布式系統(tǒng)內(nèi)不會(huì)產(chǎn)生碰撞由和作區(qū)分,并且效率較高。經(jīng)測(cè)試每秒能夠產(chǎn)生萬(wàn)個(gè)。 概述 分布式系統(tǒng)中,有一些需要使用全局唯一ID的場(chǎng)景,這種時(shí)候?yàn)榱朔乐笽D沖突可以使用36位的UUID,但是UUID有一些缺點(diǎn),首先他相對(duì)比較長(zhǎng),另外UUID一般是無(wú)序的。 有些時(shí)候我...

    lemon 評(píng)論0 收藏0
  • 雪花算法(01)介紹

    摘要:雪花算法生成的最終結(jié)果其實(shí)就是一個(gè)類型的長(zhǎng)整型數(shù)字,這是一個(gè)大前提算法所有的內(nèi)容都是針對(duì)這個(gè)數(shù)字進(jìn)行運(yùn)算的。根據(jù)上面的理論可以開(kāi)始學(xué)習(xí)雪花算法。 針對(duì)每個(gè)公司,隨著服務(wù)化演進(jìn),單個(gè)服務(wù)越來(lái)越多,數(shù)據(jù)庫(kù)分的越來(lái)越細(xì),有的時(shí)候一個(gè)業(yè)務(wù)需要分成好幾個(gè)庫(kù),這時(shí)候自增主鍵或者序列之類的主鍵id生成方式已經(jīng)不再滿足需求,分布式系統(tǒng)中需要的是一個(gè)全局唯一的id生成規(guī)則。既然號(hào)稱在全局分布式系統(tǒng)中唯一...

    or0fun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<