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