java - RandomStringUtils.randomAlphanumeric(30) 是有效的 GUID 策略吗?

标签 java guid uuid distributed-computing primary-key-design

我需要一个随机字符串生成器来生成一个字母数字 字符串以用作唯一 键在 30 个字符或更少 的分布式系统中。它不能包含任何特殊字符。

威尔RandomStringUtils#randomAlphanumeric为此工作?

底层实现使用java.util.Random

唯一键集可能会少于 1000 亿,系统需要能够每秒处理多达 1000 条记录。

我如何证明该策略具有足够低的冲突概率以用作主键生成器?

最佳答案

java.util.Random 实现了 LCG 算法,其周期为 2^48 个数字,因此 RandomStringUtils 将与此实现一样好,1000 亿个 30 个字符的字符串将需要 ~ 2^48 个随机元素的 1%。

请注意 java.util.Random 不是加密安全的,因此给定一些 GUID 可以推断出下一个 GUID,因此我会使用另一个使用加密安全随机数生成器的实现(例如 java.util.SecureRandom ).

关于java - RandomStringUtils.randomAlphanumeric(30) 是有效的 GUID 策略吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34690288/

相关文章:

iOS:有没有办法知道 iOS 的当前用户是否使用过我的应用程序

sql - 是否有实现不可知的方式让 SQL DB 提供 UUID?

java - 将带有 alpha 图像的 TrueColor 转换为带有透明图像的 256 色

javascript - 如何创建 GUID/UUID?

cocoa - 有没有办法在Mac上生成标准128位GUID(UUID)?

sql - 有没有办法在 Oracle 数据库中创建自动递增的 Guid 主键?

javascript - 如何使用自定义字母表生成 GUID,其行为类似于 MD5 哈希(在 JavaScript 中)?

java - 无法从 Wiki 读取日文内容

c# - 从 C# 迁移到 Java 的技巧?

java - 如何在 lambda 函数中传递多个 get 参数?