短链生成系统设计与实现
   软件工程   0 评论   1107 浏览

短链生成系统设计与实现

   软件工程   0 评论   1107 浏览

如需使用:https://url.rawchen.com
项目开源:https://github.com/rawchen/ShortUrl

持续更新增加功能中:其中包括限流、遏抑刷接口、设计过期时间直接使用Redis等。

起因

我的一个项目阿里云盘列表程序分享出的链接形如 https://pan.rawchen.com/file/6191d08ffe395a415d9b44cbb4a1f9b16832f8c7 这样。所以看着很不舒服,因为后面文件id阿里云盘那边设计防止hash碰撞就搞的很长。但是一般阿里的分享又是形如
https://www.aliyundrive.com/s/GiUsfZPJSbW 这样,虽然看起来也是很长但是后面那一堆编码倒是短了很多。

而且现在网络上公共短链接服务数不胜数,但是就存在问题了,你能保证那些服务给你永久保存下去?你又没给它票子。而且它的服务终究是公开,会导致它的短链容量越来越大,用户量越来越多,查询使用效率越来越低。那么我有一台服务器,一个域名,我是不是能自己设计一个短链接服务给自己用呢?(后面制作出来会开源不出意外还是Spring Boot + Thymeleaf)

设计思路

第一个问题就是编码,因为是自用所以对于0-9、a-z、A-Z应该都能接受。所以10+26+26=62个字符。如果62的5次方是9亿两千万个容量那应该够用了。所以大致的链接形式形如:https://url.rawchen.com/0wF5c,是不是简洁多了。

第二个问题,存储上应该是MySQL存储,既然自用,响应就可以用不到内存的Redis这么快,对于表的设计暂时就是键值对,比如上面0wF5c对应你的链接。加个索引优化。可能以后还会拓展。

最后一个问题就是生成的页面逻辑,首先权限需不需要可以设置个,比如加个权限表,就设置个登录密码,不然就是简单的隐藏式api,或者直接不用权限,供大家用,反正用的人不多。怎么简单怎么来。但是为了以后开源还是加个权限好管理。还有是否过期时间是否需要,如果需要的话,就搞Redis。不过个人用就永久有效吧。

最后:
我感觉这个项目写起来会很有意思,因为功能可以无限拓展,比如统计短链接的User-Agent和ip,设计过期时间,设计id和编码互转等。
Coding...

大致逻辑

进入url.rawchen.com,输入设定好的密码登录,新增链接,点击生成,后台自动查重是否已存在用户给的链接,存在就直接拼接输出那个对应的短链。如果没有重复就验证生成的编码是否在数据库有了,有就再生成再判断(一般9亿能重复那概率跟买彩票一样除非用户量很大短链接很多),直到没重复就添加进数据库,返回这个编码拼接的短链。

2022.03.31第一版

已实现啦,https://pan.rawchen.com/file/6191d08ffe395a415d9b44cbb4a1f9b16832f8c7 长链接通过短链接生成变成了 https://url.rawchen.com/PMmC7

参考:
短 URL 系统是怎么设计的?
短网址服务的原理是什么?
手机短信里的短链接,是如何设计与实现的?
短信中的链接为什么那么短?

本文由 RawChen 发表, 最后编辑时间为:2022-05-11 01:05
如果你觉得我的文章不错,不妨鼓励我继续写作。

发表评论
选择表情
Top