string - 什么更好地在运行时生成随机 ID 或之前将它们放在手边?

标签 string algorithm random unique

我正在编写一个应用程序,需要做一些功能类似于 url 缩短网站所做的事情。我将生成 6 个字符(不区分大小写的字母数字)随机字符串,用于标识其较长版本的链接。这导致 2176782336 种可能性 ((10+26)^6)。在分配这些字符串时,我可以考虑两种方法。

方法 1:系统在运行时生成一个随机字符串,并检查它在系统中的唯一性,如果不唯一,则重试。最后以某种方式到达一个独特的字符串。但如果用户可能“不走运”,它可能会产生问题。

方法 2:我生成一些可能值的池,并在需要时立即分配它们,但这将确保几乎立即为用户分配一个唯一的字符串,同时这也可能意味着,我必须事先在 crons 中进行大量计算,并且会随着时间的推移而增加。

虽然我已经有了生成此类值的代码,但在我期待高度加速的应用程序体验时,方法上的帮助可能会很有见地。我找不到任何关于此的比较研究。

干杯!

最佳答案

我在类似情况下所做的是让 N 值排队,以便我可以立即分配它们,然后当队列的大小低于某个阈值时(例如,.2 * N) 我有一个后台任务,将另一个 N 项目添加到队列中。在您的程序启动后立即启动此后台任务可能是有意义的(而不是离线生成第一个 N 值,然后在启动时加载它们),在假设会有一些延迟的情况下运行在启动和请求队列中的值之间。

关于string - 什么更好地在运行时生成随机 ID 或之前将它们放在手边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17476125/

相关文章:

algorithm - 水库采样问题

javascript - 在 Javascript 或 jQuery 中,如何检测字符串开头的空格?

c# - c#中字符串中最后一个逗号之前的所有元素

java - 如何从字符串中获取空格键(32)的整数值到另一个字符串?

iphone - 将 UILabel 中的单词居中的算法

ruby-on-rails - 为线程评论系统设置通知系统的正确方法

algorithm - 字符串的有效排列

java - 方法不允许返回字符串

c++ - 为什么使用字符串 vector 时不需要字符串库?

jquery - 如何让标签随机交换位置?