如需使用: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 系统是怎么设计的?
短网址服务的原理是什么?
手机短信里的短链接,是如何设计与实现的?
短信中的链接为什么那么短?