hutool雪花算法生成重複

參考鏈接:

記一次線上 Snowflake 算法 id 重複事件覆盤_idutil.getsnowflake-CSDN博客

Snowflake生成器單機模擬時間回退導致id重複 · Issue #1206 · dromara/hutool (github.com)

一、問題描述

使用版本:

  <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.3</version>
        </dependency>

獲取id具體代碼:

public class SnowflakeUtils {

    /**
     * 生成Snowflake id
     */
    public static String createNo() {
        Snowflake snowflake = new Snowflake(1, 1);
        return snowflake.nextIdStr();
    }
}

問題:高併發時重複。具體表現爲jmeter設置10秒內發送200個請求時,偶發性會產生1~2個重複id,500個時,固定會有一場,1000個併發時,大約2%重複

解決方法:

1)單例模式獲取雪花算法實例

2)升級到叫新版本(對於我的版本其實不用,但是最好升級一下)

改造後的pom和java:

pom:

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.25</version>
        </dependency>

java:

public class SnowflakeUtils {

    /**
     * 生成Snowflake id
     */
    public static String createNo() {
        Snowflake snowflake = IdUtil.getSnowflake(1, 1);//單例方式獲取實例,否則高併發會重複!!!
        return snowflake.nextIdStr();
    }
}

jmeter:

設置

0異常:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章