短链的核心逻辑是链接映射,或者说重定向。

简述

短链,顾名思义,短链接。它是相对于原链接的一个概念,与原链接有相同的目的地,但比原链接更短。

为什么要使用短链接

很多时候,我们的一个链接会很长,比如:

https://cn.bing.com/search?q=urldecode+-site:*.csdn.net+-site:zhihu.com&cvid=0c46addea00b41a9b8c2ecd1058a0190&gs_lcrp=EgZjaHJvbWUyBggAEEUYOdIBCDQ4ODFqMGo5qAIAsAIB&FORM=ANAB01&PC=U531

我们在分享或是传递这个链接的时候,就会占用更多的资源,并且在显示上也不好看,所以我们就设计了一个类似于别名的东西,你用这个别名就可以拿到对应的原链接。

设计

设计上没有好讲的,一共就涉及到两个主要步骤:

  1. 短链生成
  2. 寻链

短链生成

短链生成的算法其实有很多,你甚至可以自己用随机数。但是短链生成的时候需要注意一些细节:

  1. 短链冲突。不同原链生成的短链是不能重复的,也就是短链->原链是单向唯一的。
  2. 短链一般会用专有的访问域,比如短链的上下文是全局唯一,甚至可以有专门的寻链域名用作隔离。

寻链

寻链其实就是寻找短链到长链映射的过程。

实际上,我们在生成短链的时候会需要将短链作为寻址key,与对应的长链一起保存下来。我们知道短链到原链是单向唯一的,这表示我们甚至可以用简单的Map表来存储映射信息。当然,是选用缓存还是持久化,这就要根据具体项目具体分析了。

简单demo

我这里用Java的SpringBoot框架简单写一个demo。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@RestController
@RequestMapping("a")
public class AController {

@Autowired
private LinkMap linkMap;

@GetMapping("gen")
public String gen(@RequestParam("sc") String sc) {
return linkMap.revert(sc);
}

@GetMapping("{shortChain}")
public void chain(@PathVariable String shortChain, HttpServletResponse response) {
String url = linkMap.get(shortChain);
response.setStatus(302);
response.setHeader("location", url);
}
}

代码内的gen方法就是生成短链的请求,chain就是短链访问的路径。

实际上,你完全可以根据个人需求,创建专门的短链生成与转发服务器。


本站总访问量