亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java中雪花算法的實(shí)現(xiàn)

 更新時(shí)間:2022年12月14日 14:24:27   作者:羲圣  
雪花算法是一種分布式的id生成算法。原理是將long分成若干個(gè)區(qū)段分別管理。本文將利用Java簡單的實(shí)現(xiàn)雪花算法,感興趣的可以了解一下

前言

本文主要介紹了Java雪花算法的實(shí)現(xiàn)

一、雪花算法

雪花算法是一種分布式的id生成算法。原理是將long分成若干個(gè)區(qū)段分別管理。默認(rèn)包括時(shí)間戳、數(shù)據(jù)中心ID/機(jī)房ID,woker id(機(jī)器編號),以及sequence四個(gè)部分,用戶可以自由擴(kuò)展第五個(gè)部分type。 同時(shí)用戶也可以動態(tài)調(diào)整這5個(gè)部分的占比關(guān)系。

二、使用步驟

1.引入庫

1.1 編譯并發(fā)布到本地

gradle clean build publishToMavenLocal-x test

1.2 gradle (gradle.org)

implementation'io.github.kylin-hunter:k-commons:1.0.7'

1.3 maven (maven.apache.org)

        <dependency>
          <groupId>io.github.kylin-hunter</groupId>
            <artifactId>io.github.kylin-hunter:k-commons</artifactId>
          <version>1.0.7</version>
        </dependency>

2.示例

2.1 主要Api

2.1.1 構(gòu)造器

   /**
 * @param type 業(yè)務(wù)類型
 * @param workerId 機(jī)器編號
 * @param datacenterId 機(jī)房編號
 * @title UidGenerator 構(gòu)造器
 * @description
 * @author BiJi'an
 * @date 2022-12-11 16:19
 */
public UidGenerator(long type,long workerId,long datacenterId);
/**
 * @param sequenceBits  序列號 占的bit位數(shù)
 * @param typeBits 業(yè)務(wù)類型 占的bit位數(shù)
 * @param workerIdBits 機(jī)器編號 占的bit位數(shù)
 * @param datacenterIdBits 機(jī)房編號 占的bit位數(shù)
 * @param type 業(yè)務(wù)類型
 * @param workerId 機(jī)器編號
 * @param datacenterId 機(jī)房編號
 * @title UidGenerator 構(gòu)造器
 * @description
 * @author BiJi'an
 * @date 2022-12-11 16:20
 */
public UidGenerator(int sequenceBits,int typeBits,int workerIdBits,int datacenterIdBits,        long type,long workerId,        long datacenterId);

2.1.2 生成和反解uid

 /**
 * @return long
 * @title 獲取下一個(gè)uid
 * @description
 * @author BiJi'an
 * @date 2022-12-11 00:39
 */
public synchronized long nextId();


/**
 * @param uid uid
 * @return io.github.kylinhunter.commons.uid.UidInfo
 * @title 通過uid 反解出uid的信息
 * @description
 * @author BiJi'an
 * @date 2022-12-11 16:30
 */
public UidInfo parse(long uid);

2.2代碼示例

    // 業(yè)務(wù)代碼 3,默認(rèn)業(yè)務(wù)代碼支持范圍 0-15,可以通過構(gòu)造器2調(diào)整支持范圍
    // 機(jī)器編碼 4,默認(rèn)機(jī)器編碼支持范圍0-15,可以通過構(gòu)造器2調(diào)整支持范圍
    // 機(jī)房編碼 1,默認(rèn)機(jī)房支持范圍 0-4,可以通過構(gòu)造器2調(diào)整支持范圍
    // 各個(gè)編碼范圍,均可以調(diào)整
        UidGenerator worker = new UidGenerator(3, 4, 1);
        for (int i = 0; i < 10; i++) {
          long nextId = worker.nextId();
          System.out.println(nextId + "=>" + worker.parse(nextId));
        }

2.3 結(jié)果輸出

        2022-12-11 22:54:26.177 [Test worker] INFO   -  i.g.k.commons.uid.UidGenerator[107]: timestampBits 41,datacenterIdBits 2, workerIdBits 4,typeBits 4, sequenceBits 12
        161155503589961728=>UidInfo[sequence=0, type=3, workerId=4, datacenterId=1, timestamp=1670921666180/2022-12-13 16:54:26]
        161155503644487680=>UidInfo[sequence=0, type=3, workerId=4, datacenterId=1, timestamp=1670921666193/2022-12-13 16:54:26]
        161155503648681984=>UidInfo[sequence=0, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681985=>UidInfo[sequence=1, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681986=>UidInfo[sequence=2, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681987=>UidInfo[sequence=3, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681988=>UidInfo[sequence=4, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681989=>UidInfo[sequence=5, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681990=>UidInfo[sequence=6, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]
        161155503648681991=>UidInfo[sequence=7, type=3, workerId=4, datacenterId=1, timestamp=1670921666194/2022-12-13 16:54:26]

到此這篇關(guān)于詳解Java中雪花算法的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java雪花算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Date時(shí)間類型的操作實(shí)現(xiàn)

    Java Date時(shí)間類型的操作實(shí)現(xiàn)

    本文主要介紹Java Date 日期類型,以及Calendar的怎么獲取時(shí)間,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Java實(shí)現(xiàn)按比抽獎功能

    Java實(shí)現(xiàn)按比抽獎功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)按比抽獎功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 新手初學(xué)Java的內(nèi)部類

    新手初學(xué)Java的內(nèi)部類

    這篇文章主要介紹了java內(nèi)部類原理與用法,結(jié)合實(shí)例形式分析了Java內(nèi)部類的概念、原理、分類及相關(guān)使用技巧,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • Java實(shí)現(xiàn)TFIDF算法代碼分享

    Java實(shí)現(xiàn)TFIDF算法代碼分享

    這篇文章主要介紹了Java實(shí)現(xiàn)TFIDF算法代碼分享,對算法進(jìn)行了簡單介紹,概念,原理,以及實(shí)現(xiàn)代碼的分享,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java實(shí)現(xiàn)簡單掃雷程序

    Java實(shí)現(xiàn)簡單掃雷程序

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單掃雷程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java8中常用的日期時(shí)間工具類總結(jié)

    Java8中常用的日期時(shí)間工具類總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Java8中常用的三個(gè)日期時(shí)間工具類,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-07-07
  • Spring Boot 2和Redis例子實(shí)現(xiàn)過程解析

    Spring Boot 2和Redis例子實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Spring Boot2發(fā)布與調(diào)用REST服務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Spring實(shí)現(xiàn)文件上傳的配置詳解

    Spring實(shí)現(xiàn)文件上傳的配置詳解

    這篇文章將為大家詳細(xì)說明一下spring上傳文件如何配置,以及從request請求中解析到文件流的原理,文中示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • SpringBoot處理form-data表單接收對象數(shù)組的方法

    SpringBoot處理form-data表單接收對象數(shù)組的方法

    form-data則是一種更加靈活的編碼方式,它可以處理二進(jìn)制數(shù)據(jù)(如圖片、文件等)以及文本數(shù)據(jù),這篇文章主要介紹了SpringBoot處理form-data表單接收對象數(shù)組,需要的朋友可以參考下
    2023-11-11
  • mybatis where 標(biāo)簽使用

    mybatis where 標(biāo)簽使用

    where標(biāo)記的作用類似于動態(tài)sql中的set標(biāo)記,本文主要介紹了mybatis where 標(biāo)簽使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論