标签
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 是内存操作,所以效率也挺高