欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于雪花算法實(shí)現(xiàn)增強(qiáng)版ID生成器詳解

 更新時(shí)間:2022年10月17日 14:13:15   作者:陳其苗  
這篇文章主要為大家詳細(xì)介紹了如何基于雪花算法實(shí)現(xiàn)增強(qiáng)版ID生成器,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)具有一定的借鑒價(jià)值,需要的可以了解一下

基于雪花算法的增強(qiáng)版ID生成器

  • 解決了時(shí)間回?fù)艿膯栴}
  • 無需手動指定workId, 微服務(wù)環(huán)境自適應(yīng)
  • 可配置化

快速開始

1.依賴引入

<dependency>
    <groupId>io.github.mocreates</groupId>
    <artifactId>uid-generator</artifactId>
    <version>2.0-RELEASE</version>
</dependency>

2.配置序列器 Sequence

    @Bean
    public Sequence sequence() {
        SequenceConfig sequenceConfig = new SimpleSequenceConfig();
        return new Sequence(sequenceConfig);
    }

3.使用序列器生成ID

    @Autowired
    private Sequence sequence;
    
    public long generateId() {
        return sequence.nextId();
    }

配置解析

目前提供兩個(gè)配置類

  • io.github.mocreates.config.DefaultSequenceConfig
  • io.github.mocreates.config.SimpleSequenceConfig

前者需要顯式地指定 workerId、datacenterId,可以結(jié)合數(shù)據(jù)庫來使用,后者是利用網(wǎng)卡信息進(jìn)行自適應(yīng)

詳情

字段名釋義默認(rèn)值
twepoch可以被設(shè)置為最接近項(xiàng)目啟用前的某個(gè)時(shí)間點(diǎn)(unix 時(shí)間戳)1665817757000L
workerIdBits機(jī)器位所占的bit位數(shù)19L
datacenterIdBits數(shù)據(jù)標(biāo)識位所占的bit位數(shù)0L
sequenceBits毫秒內(nèi)自增位數(shù)3L
workerId機(jī)器位 
datacenterId數(shù)據(jù)位0L
inetAddress網(wǎng)絡(luò)相關(guān)信息 

生產(chǎn)推薦使用方式

1.依賴引入

<dependency>
    <groupId>io.github.mocreates</groupId>
    <artifactId>uid-generator</artifactId>
    <version>2.0-RELEASE</version>
</dependency>

2.創(chuàng)建表

CREATE TABLE `worker_node` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `node_info` varchar(512) NOT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modify` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='DB WorkerID Assigner for UID Generator';

3.配置 (利用主鍵自增來分配workerId, 解決分布式環(huán)境下手動指定workerId的痛點(diǎn))

    @Bean
    public Sequence sequence(WorkerNodeMapper workerNodeMapper) throws UnknownHostException {
        WorkerNode workerNode = new WorkerNode();
        InetAddress localHost = InetAddress.getLocalHost();
        workerNode.setNodeInfo(localHost.toString());
        workerNodeMapper.insertSelective(workerNode);
        DefaultSequenceConfig defaultSequenceConfig = new DefaultSequenceConfig();
        defaultSequenceConfig.setWorkerId(workerNode.getId());
        return new Sequence(defaultSequenceConfig);
    }

4.使用序列器生成ID

    @Autowired
    private Sequence sequence;
    
    public long generateId() {
        return sequence.nextId();
    }

JMH 性能測試

測試機(jī)硬件情況

MacBook Pro (13-inch, M1, 2020) 8C 16G

Sequence 配置參數(shù)

    private static final DefaultSequenceConfig SEQUENCE_CONFIG = new DefaultSequenceConfig();

    static {
        SEQUENCE_CONFIG.setSequenceBits(22);
        SEQUENCE_CONFIG.setWorkerIdBits(0);
        SEQUENCE_CONFIG.setDatacenterIdBits(0);
        SEQUENCE_CONFIG.setTwepoch(System.currentTimeMillis());

        SEQUENCE_CONFIG.setWorkerId(0L);
        SEQUENCE_CONFIG.setDatacenterId(0L);
    }
    private static final Sequence SEQUENCE = new Sequence(SEQUENCE_CONFIG);

JMH參數(shù)

@BenchmarkMode(Mode.Throughput)
@Threads(10)
@Warmup(iterations = 3, time = 10, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 10, time = 10, timeUnit = TimeUnit.SECONDS)
@State(value = Scope.Benchmark)
@Fork(1)
@OutputTimeUnit(TimeUnit.SECONDS)

測試結(jié)果

BenchmarkModeCntScoreErrorUnits
SingleNodeSequenceTest.nextIdTestthrpt1027825573.565 ± 962298.054 ops/s

Tip

如果對qps性能要求較高,可以適當(dāng)調(diào)整sequenceBits

倉庫地址

https://github.com/mocreates/sequence

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

相關(guān)文章

  • SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動時(shí)執(zhí)行一次

    SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動時(shí)執(zhí)行一次

    本文主要介紹了SpringBoot中@Scheduled實(shí)現(xiàn)服務(wù)啟動時(shí)執(zhí)行一次,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • SpringAOP實(shí)現(xiàn)自定義接口權(quán)限控制

    SpringAOP實(shí)現(xiàn)自定義接口權(quán)限控制

    本文主要介紹了SpringAOP實(shí)現(xiàn)自定義接口權(quán)限控制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • mybatis實(shí)現(xiàn)mapper代理模式的方式

    mybatis實(shí)現(xiàn)mapper代理模式的方式

    本文向大家講解mybatis的mapper代理模式,以根據(jù)ide值查詢單條數(shù)據(jù)為例編寫xml文件,通過mapper代理的方式進(jìn)行講解增刪改查,分步驟給大家講解的很詳細(xì),對mybatis mapper代理模式相關(guān)知識感興趣的朋友一起看看吧
    2021-06-06
  • java對數(shù)組進(jìn)行排序的方法

    java對數(shù)組進(jìn)行排序的方法

    這篇文章主要介紹了java對數(shù)組進(jìn)行排序的方法,涉及java數(shù)組排序的技巧,需要的朋友可以參考下
    2015-03-03
  • Mybatis或Mybatis-Plus框架的xml文件中特殊符號的使用詳解

    Mybatis或Mybatis-Plus框架的xml文件中特殊符號的使用詳解

    這篇文章主要介紹了Mybatis或Mybatis-Plus框架的xml文件中特殊符號的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java生成彩色附logo二維碼

    java生成彩色附logo二維碼

    這篇文章主要為大家介紹了java生成帶logo的多彩二維碼,比一般二維碼顏色鮮艷,美觀,如何生成二維碼,下面小編為大家分享實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • javaWEB中前后臺亂碼問題的解決方法總結(jié)

    javaWEB中前后臺亂碼問題的解決方法總結(jié)

    下面小編就為大家?guī)硪黄猨avaWEB中前后臺亂碼問題的解決方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java如何實(shí)現(xiàn)一個(gè)簡化版的Stream框架

    Java如何實(shí)現(xiàn)一個(gè)簡化版的Stream框架

    這篇文章主要為大家詳細(xì)介紹了一個(gè)簡化版的 Stream 實(shí)現(xiàn),展示了如何通過延遲執(zhí)行來處理數(shù)據(jù)流,感興趣的小伙伴可以跟隨小編一學(xué)習(xí)一下
    2024-10-10
  • SpringBoot整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能

    SpringBoot整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能

    本教程詳細(xì)介紹了如何使用SpringBoot整合SpringSecurity實(shí)現(xiàn)數(shù)據(jù)庫登錄和權(quán)限控制,本文分步驟結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 詳解SpringBoot項(xiàng)目整合Vue做一個(gè)完整的用戶注冊功能

    詳解SpringBoot項(xiàng)目整合Vue做一個(gè)完整的用戶注冊功能

    本文主要介紹了SpringBoot項(xiàng)目整合Vue做一個(gè)完整的用戶注冊功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論