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异常:

posted @ 2024-03-20 16:43  jiafeng  阅读(1011)  评论(0编辑  收藏  举报