我最近为自己购买了一个用于缩短个人 URL 的域名。 我创建了一个函数来生成 4 个字符的字母数字字符串作为引用。
但是
如何检查它们是否已被使用?我无法检查数据库中是否存在每个 URL,或者这只是它的工作方式,我必须这样做吗? 如果是这样,如果我生成了 13.000.000 个 URL(共 14.776.336 个)怎么办?我是否需要一直生成字符串,直到找到数据库中还没有的字符串?
这看起来不正确,谁能给我一些建议?
最佳答案
我想到的一种内存效率高且速度更快的方法如下。根本不用数据库就可以解决这个问题。这个想法是,您可以将它们存储在内存中,而不是将使用过的 url 存储在数据库中。由于将它们存储在内存中会占用大量内存,因此我们将使用一个位集(位数组)并且每个 url 只使用一位。
- 对于您生成的每个随机字符串,为位于 b/w 0 和最大数字 K 的那个创建一个哈希码。
- 创建一个位集(基本上是一个位数组)。每当你使用一些 url 时,将位设置中相应的哈希码位设置为 1。
- 每当你生成一个新的 url 时,看看它的 hashcode 位是否被设置。如果是,则丢弃该 url 并生成一个新的 url。重复这个过程,直到你得到一个未使用的。
这样你就永远避免了数据库,你的查找速度非常快,而且占用的内存最少。
我借用了this place的想法
关于php - URL 缩短器算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227772/