我需要一个随机字符串生成器来生成一个字母数字 字符串以用作唯一 键在 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/