我正在编写一个应用程序,需要做一些功能类似于 url 缩短网站所做的事情。我将生成 6 个字符(不区分大小写的字母数字)随机字符串,用于标识其较长版本的链接。这导致 2176782336 种可能性 ((10+26)^6)。在分配这些字符串时,我可以考虑两种方法。
方法 1:系统在运行时生成一个随机字符串,并检查它在系统中的唯一性,如果不唯一,则重试。最后以某种方式到达一个独特的字符串。但如果用户可能“不走运”,它可能会产生问题。
方法 2:我生成一些可能值的池,并在需要时立即分配它们,但这将确保几乎立即为用户分配一个唯一的字符串,同时这也可能意味着,我必须事先在 crons 中进行大量计算,并且会随着时间的推移而增加。
虽然我已经有了生成此类值的代码,但在我期待高度加速的应用程序体验时,方法上的帮助可能会很有见地。我找不到任何关于此的比较研究。
干杯!
最佳答案
我在类似情况下所做的是让 N
值排队,以便我可以立即分配它们,然后当队列的大小低于某个阈值时(例如,.2 * N
) 我有一个后台任务,将另一个 N
项目添加到队列中。在您的程序启动后立即启动此后台任务可能是有意义的(而不是离线生成第一个 N
值,然后在启动时加载它们),在假设会有一些延迟的情况下运行在启动和请求队列中的值之间。
关于string - 什么更好地在运行时生成随机 ID 或之前将它们放在手边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17476125/