短链接算法解析
观察到短链接这个东西,主要是在微博和微信上,例如微信我订阅了一个每日推送
,短小的篇幅里,夹杂的就是短链接,若是原链接,则篇幅很大,一点也不简洁。
短链接网上的各类博客讨论的不止一点半点了,我这里并不是太想重复前辈们写的东西,我这里想的是直接上算法展示,具体的短链接服务,留待我以后完成后,写一篇总结,挂上GitHub地址就好了,这样感(tou)觉(lan)不(hen)错(bang)。
我参考的博客:
原理
获得短链接:
1 | long url => server => short url |
访问短链接:
1 | short url => short server (重定向)=> long url |
short server 服务提供重定向到 长网址的功能,还可以在short server 服务上进行点击访问统计,用户地域分析等等统计功能。 像Google、新浪等短网址服务提供商大都集成了类似的统计后台功能(有的可能需要付费) 。
百度短网址生成网站。
谷歌原本也有,不过已经关停了。
算法
大体上来说,短网址上熟知的算法有两种,Hash算法和自增序列ID算法。
Hash算法
将长网址md5生成32位签名串(原始数据加上盐,这样不容易暴露算法),分为4段,每段8个字节;
对这四段循环处理,取8个字节,将他看成16进制串与0x3fffffff(30位1)与操作,即超过30位的忽略处
理;这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
总的md5串可以获得4个6位串;取里面的任意一个就可作为这个长url的短url地址;
字母表既由数字和大小写字母组成(一般顺序会被打乱):
1 | // 短链字符: a-z 0-9 A-Z |
生成短链的代码:
1 | // 首先every8Chars是md5中的一组子串, 8个字符 |
完整代码:
1 | // 短链字符: a-z 0-9 A-Z |
自增序列ID算法
短址的长度一般设为 6 位,而每一位是由 [a - z, A - Z, 0 - 9]
总共 62 个字母组成的,所以 6 位的话,总共会有 62^6 ~= 568亿种组合。
ID作为重要组成单元,其不可重复性非常重要,在单机系统中,我们可以借助MySQL自增索引来获取ID,分布式环境中则可以借助Redis这类分布式K/V系统做发号器,来获取这个ID。
简单的生成短链接代码:
1 | package main |
本文标题:短链接算法解析
文章作者:小师
发布时间:2019-10-22
最后更新:2022-05-04
原始链接:chunlife.top/2019/10/22/短连接算法解析/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可