gpt4 book ai didi

Java随机数重复问题

转载 作者:行者123 更新时间:2023-12-02 12:12:47 26 4
gpt4 key购买 nike

我有一个通过网络服务与外部系统通信的系统,我们在其中发送随机编号作为消息 ID,并且将其存储为数据库中表的主键。这里的问题是,因为我们每天有大约 80-90 k 的调用,所以我看到了很多异常,说主键重复。我正在用java生成随机数。我如何确保我生成的任何随机数都不会重复。

下面是生成随机数的代码:

private static int getRandomNumberInRange(int min, int max) {

if (min >= max) {
throw new IllegalArgumentException("max must be greater than min");
}

Random r = new Random();
return r.nextInt((max - min) + 1) + min;
}

最佳答案

使用随机数作为主键没有任何问题。您只需要确保从足够大的范围中选择数字,以使多次选择数字的机会几乎为零。

如果您在 30 年内每天生成 10 万个标识符,则大约有 10 亿个标识符。因此,使用 100 位数字将使在此期间几乎不可能发生冲突。 13 个字节,如果幸运的话可能是 12 个字节。

我将“几乎为零”定义为 2-40。将其定义为小于 2-50 没有多大意义,因为 RAM 和硬盘驱动器等设备更有可能遭受未被检测到的错误。当您必须满足唯一性约束时,涉及 50% 碰撞几率的估计是没有用的。

UUID 并没有什么神奇之处。它们只是带有详细编码的 122 位数字。它们会起作用,但是对于这个应用程序来说它们太过分了。

关于Java随机数重复问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46411867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com