如何实现可以自定义的URL缩短器?

时间:2015-05-25 04:44:11

标签: algorithm url-shortener

我想实现一个URL缩短器,人们可以自定义缩短的url代码。

在一个简单的网址缩短器中,人们会为长网站获取一个混乱的代码。但在某些情况下,人们可能希望自定义或指定短网址以使其更具可读性和自我解释。例如,url.com/jimhome而不是url.com/D3aK1。这会产生两个参数:long url和指定的短url。系统当然需要检查是否使用了短网址。

我研究过How to code a URL shortener?并发现它很好用。

我的想法是:在DB,id,long url,short url中创建3个字段。使用没有自定义的常规请求,按照帖子执行并存储生成的短URL。使用自定义请求,首先检查是否存在,如果不存在,则插入长URL和短URL,但这会破坏ID和short之间的对应关系网址。有更优雅的方式吗?

我不是母语为英语的人,如果你感到困惑,请发表评论。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您要避免的问题是每个网址的ID是由mysql自动增量指定的,但自定义网址需要特定的ID。

避免这种情况的最简单方法是以不同方式选择ID。例如,您可以使用当前的unix时间戳并将其用作您的ID。

两个潜在的问题是生成的ID相同(两个并发用户),并且URL比您想要的长。这可以通过以某种任意方式减少数量并在发生冲突时重试来解决。

示例:

//create a unique ID
$ID = time()/100000;

while(tableContains($ID))
     $ID++;

insertRow($ID, idToShortURL($ID), $longURL);

这个伪代码只是为了使它更小。如果然后将增加ID,直到它在添加之前是唯一的。

自定义ID类似于:

$ID = urlToID($longURL);//using the method described in your linked question

if(tableContains($ID)
     echo 'Error: the custom url is already in use';
else
     insertRow($ID, idToShortURL($ID), $longURL);

我希望这不是太模糊,这只是我想到的第一件事。有一百万种合法的方法来实现这一目标。只要您以某种方式选择ID,订单与分配的ID无关,您将避免相关问题。