Skip to content
标签
todo
字数
730 字
阅读时间
3 分钟

原理说明

短网址,又叫短链,也就是一个非常短的网址,由域名加唯一 id 字母或数字字符混合组成,大概不超过 10 位数。

短网址创建

短网址创建方法如下:

  • 获取参数网址;
  • 查询是否存在,存在返回短网址,不存在创建短网址;
  • 访问短网址时候,查询数据库原网址作 302;

短网址展示

短网址从打开到展现网页,中间经过以下步骤:

  • 打开短网址后请求短网址服务器;
  • 根据唯一 id 读取数据库原站网址;
  • 进行 302 重定向到原站网址;

中间可能会统计访问者信息(IP,设备信息等),用来收集访问数据,便于决策;

短网址作用

使用短网址的好处有以下几个方面:

  • 短网址比起一大段长长的网址来说,看起来很舒服;
  • 短网址容易节省空间和数据库容量;
  • 短网址比较安全,避免黑客直接攻击原站,减小 DDOS,CC 攻击;

短链的生成

雪花算法

首先,生成短链接,可以用雪花算法 + 哈希的方式来实现。


雪花算法是在分布式场景下,根据时间戳、不同的机器 ID 以及序列号生成的唯一数。它的优点在于简单方便,随取随用。

通过雪花算法取到的唯一数,再用哈希映射,将数字转为一个随机的字符串,如果短链字符串比较长,可以直接取前 6 位。但是,由于哈希映射的结果可能会发生冲突,所以对哈希算法的要求比较高。

62 进制数生成短链接

除了雪花算法,还可以用 62 进制数(A-Za-z0-9)来生成短链接地址。首先得到一个自增 ID,再将此值转换为 62 进制(a-zA-Z0-9)的字符串,一个亿的数字转换后也就五六位(1 亿 -> zAL6e)。

将短链接服务器域名,与这个字符串进行拼接,就能得到短链接的 URL,比如:t.cn/zAL6e。

而生成自增 ID 需要考虑性能影响和并发安全性,所以我们可以通过 Redis 的 incr 命令来做一个发号器,它是一个原子操作,因此我们不必担心数字的安全性。而 Redis 是内存操作,所以效率也挺高

参考

听说你学过架构设计?来,弄个短链系统 - 掘金

Node短链服务搭建部署 - 掘金

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写