1、根据需求生成的ID,需要在32位范围中。
// 应用程序 4核, 8G window.
// redis 4核, 8G window.
Map<Long,Long> map = new HashMap<>();
// 测试redis 在60万的并发下,获取ID
Long start = System.currentTimeMillis();
int i=0;
while(i<600000){
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
Long value = redisTemplate.opsForValue().increment(redisKey,1);
if (null != map.get(value)) {
System.out.println(value+"已经存在!");
}else{
map.put(value,value);
}
}
});
i++;
}
Long end = System.currentTimeMillis();
System.out.println("finish! time="+(end-start));
运行结果:finish! time=2904
线程增加10倍,当把线程数量改成了600万,花费了 finish! time=34245。等待了34秒来是用户无法接受。
算法:
twitter 提供了 snowflake算法 64位
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步