likes
comments
collection
share

短链的原理

作者站长头像
站长
· 阅读数 11

1. 什么是短链?

在使用网址访问访问网站的时候,可能都会遇到一个很长的链接,多则可能几百个字符,这样的链接看起来非常的长

https://www.google.com/search?q=%E9%95%BF%E9%93%BE%E9%93%BE%E6%8E%A5&rlz=1C5GCEM_enCN1065&oq=%E9%95%BF%E9%93%BE%E9%93%BE%E6%8E%A5&aqs=chrome..69i57j0i13i512j0i10i13i512l2j0i13i30j0i10i13i30j0i13i30l4.4703j0j15&sourceid=chrome&ie=UTF-8

像以上这种,就是长链链接,看起来非常的臃肿,虽然说链接里面携带的一些参数使链接变长是不可避免的,但是我们可以使用另一种方法,既能使链接携带参数也能使链接为短链接,后面会讲到短链的原理和实现方式。

像以上这种就是短链,使用短链有以下几种优点。

  1. 相比长链更加简洁。
  2. 便于使用,粘贴复制分享给别人时较为便捷,有些平台对分享内容的长度有所限制(微博只能发140字),这个时候使用短链可以输入更多的内容。
  3. 短链生成的二维码更容易识别。

2. 短链的原理

实现短链的核心原理就是链接映射表和302临时重定向

当我们用户用短链访问服务器时,服务器会将用户携带的短链在服务器中的链接映射表中寻找唯一与之对应的长链接,寻找到后返回重定向,重定向至长链接的网页,这样用户就可以不直接携带长链接,而是携带一个短链接,间接的去访问长链接,这个中间层就是服务器,服务器会在中间做一个链接映射和重定向的操作。

短链的原理

3. 短链的实现方式

3.1. 自增id法

自增ID的方法也叫做永不重复法,即采用发号器原理来实现,每一个url对应一个数字,然后自增,可以理解为ID,然后将ID进行相应的转换(比如进制转换),由于ID是唯一的,所以转换出来的结果也是唯一的。短网址的长度一般设为 6 位,而每一位是由 [a - z, A - Z, 0 - 9] 总共 62 个字母组成的,所以 6 位的话,总共会有 62^6 ~= 568亿种组合,基本上够用了。

3.2. 算法生成

将长链接做一次哈希算法之后就可以生产一个短链接。

我们都知道哈希算法是一种摘要算法,它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。

我们常见的哈希算法有:MD5、SHA-1、SHA-256、SHA-512 算法等。但我们最好还是使用另一种叫做 MurmurHash 的哈希算法。

因为 MD5 和 SHA 哈希算法,它们都是加密的哈希算法,也就是说我们无法从哈希值反向推导出原文,从而保证了原文的保密性。

但对于我们这个场景而言,我们并不关心安全性,我们关注的是运算速度以及哈希冲突。而 MurmurHash 算法是一个非加密哈希算法,所以它的速度回更快。

哈希冲突

学过 HashMap 的同学都知道,哈希冲突是哈希算法不可避免的问题。而解决哈希冲突的方式有两种,分别是:链表法和重哈希法。HashMap 使用了链表法,但我们这里使用的是重哈希法。

所谓的重哈希法,指的是当发生哈希冲突的时候,我们在原有长链后面加上固定的特殊字符,后续拿出长链时再将其去掉.