如果我们在平时的沟通中发送个这么长的玩意你说它裂不裂开,所以市面上就有了很多短链接生成器应运而生。
看到没,直接把又臭又长
的url,搞成了短小精悍型的。
在浏览器输入https://t.1yb.co/bo6a
会跳转到上面的网页。
说几个理由吧
-
在浏览器输入url的时候,肯定需要越短越好啊
-
如果需要在内存或者db中存储url,那肯定越短越好啊
-
url沟通传输中还可以隐藏了一部分参数,对不对
实现流程如下
-
1.先是用户输入长连接去缩短链接,返回一个短链接给用户
-
2.然后用户在浏览器地址输入短链时,根据短链接重定向跳转到长连接网址
即相应的设计2个接口:
-
【缩短链接接口】/api/short?longurl=xxx
-
【重定向接口】/{shorturl}
关键问题剖析
我们这里仅仅是拿在实现中,比较有难点或者争论的地方来阐述。
1. 缩短链接的算法
1、我首先想到的就是用UUID
的全局唯一特性
来实现一一映射长连接。
效果如下
| shorturl | longurl |
| — | — |
| fc5bc4b050ec4b2a9cfb697786f6e9e8 | https://www.baidu.com/abcdefg?key=7387746869684555 |
| fssdff83ikf8ec41239cfb69sdffeegakhj | https://www.baidu.com/abcdefg?key=7ksjkkldoiueell;g;aa |
但是这个是32
个字符,实现的短链效果如下:http://url.cn/fc5bc4b050ec4b2a9cfb697786f6e9e8
,不是很理想啊。
2、然后就想着是不是可以使用数据库自增的id来实现。
效果如下:
| shorturl | longurl |
| — | — |
| 1 | https://www.baidu.com/abcdefg?key=7387746869684555 |
| … | … |
| 100000000 | https://www.baidu.com/abcdefg?key=7ksjkkldoiueell;g;aa |
实现的短链效果如下:http://url.cn/1
,刚开始的时候是短,但是随着数据量的增加也容易裂开啊,例如:当有一亿
映射的时候,地址就变成这样了http://url.cn/100000000