短链接设计与实现

一世执手 提交于 2020-03-26 22:04:54

3 月,跳不动了?>>>

1.什么是短链接 
就是把普通网址,转换成比较短的网址。比如:http://t.cn/RlB2PdD 这种,在微博这些限制字数的应用里。好处不言而喻。短、字符少、美观、便于发布、传播。 
2.交互流程

a)用户访问短链接:http://t.cn/RtFFvic

b)短链接服务器t.cn收到请求,根据URL路径RtFFvic获取到原始的长链接:http://blog.csdn.net/poem_qianmo/article/details/52344732

c)服务器返回302状态码,将响应头中的Location设置为:http://blog.csdn.net/poem_qianmo/article/details/52344732

d)浏览器重新向http://blog.csdn.net/poem_qianmo/article/details/52344732发送请求

e)返回响应

说明:301 是永久重定向,302 是临时重定向。短地址一经生成就不会变化,所以用 301 是符合 http 语义的。同时对服务器压力也会有一定减少。
但是如果使用了 301,我们就无法统计到短地址被点击的次数了。而这个点击次数是一个非常有意思的大数据分析数据源。能够分析出的东西非常非常多。所以选择302虽然会增加服务器压力,但是我想是一个更好的选择。

3.  算法实现

a.哈希算法

最常见的短网址实现方案便是使用哈希算法,相信学过算法与数据结构的同学对这个算法并不陌生,哈希算法可以把非常长的文本甚至文件映射成一个字符串或者数字,这种算法并不陌生,我们常见的文件md5算法也属于哈希算法中的一种。但是md5比较长,通常我们会使用murmurhash来进行哈希,这是一种比较轻量级的哈希算法。我们将哈希后的值跟长连接还有失效时间一起保存在数据库里面,后面通过哈希后的值,就能够找到对应的原始长链接地址了。但是,这里还存在2个细节问题,首先是哈希地址冲突了怎么办?常见的哈希冲突解决方法,便是从后面一直找,找到一个空的插槽放进去,如果学过算法与数据结构,便知道这种算法比较不稳定,并且实现起来也麻烦。我们有一个更简单的做法,就是在原始链接后面再拼上一个自定义的字符串进行哈希。另外一个问题,便是murmurhash的哈希结果是一个32位的数字,只有0到9组成,如果似乎几千万的一个数字,也比较长,那么我们可以怎么办呢?我们可以把这个简单十进制数字转成更高的进制,把字母a到z与A到Z都用上,就可以把字符串压到非常短了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!