00:01
Hello,伙伴们大家好,我是日更,坚持日更的博客写手,那么今天分享的这个文章内容是短链接系统该如何设计?在开始之前就是先让我们熟悉一下什么是长链接,比方说我去腾讯云上,我生成一个分享链接,我会发现它会很长,因为它后面带来很多的一些核心的参数。那么我相信这类系统大家也都遇到过,一看就很头疼,因为他的要么就是域名特别长,要么就是带的参数特别多,那么就导致了一些问题的出现,比方说我们粘贴的时候呢,会粘贴不完全,导致了资源的无法访问,那太长呢,我们使用第三方服务,比如说阿里云的短信服务,那么他们是按照这个字符的数量去收费的,如果这个字符太长的话,然后费用的话可想而知也会提高的。那么第三个呢,就是我们在一些业务系统的表单提交U的时候,可能话它还会有这种长度的限制,比方说我们只允许在十个字符以内,或者是20个字符以内,那么这样的长链接呢,我们就需要把它给缩短一下,那么这个短链接系统呢就应运而生,那么关于这个短链接设计的代码呢,大家可以在我的GET1账户上看到,那这里就不再展示了,嗯,那在正是我系统设计之前呢,我也找到了一个在线的短地址生成邮箱,嗯,它大约是这样的,就是我们输入我们自己的这个地址,然后我这个地方就是以我的GETATE1账户的,呃,这个提交的地址来的,然后他最后给我生成一个这样的短链接。
01:34
嗯,所以这也进一步加进了我的好奇,那么这样的一个短链接系统该是如何设计呢?嗯,本着去设计的原则,我首先进行一个深度的思考,就是我首先我明确我设计的目的是为了使我的链接更加的短,并且是符合我的安全性的需求了。那么第二点就是我打链接的算法该如何设计?在算法的设计上呢,我们会考虑到比方说我们使用数据库,它自增的ID啊,我们自增ID呢,它可以保留到11位小数啊,11位数值就是我们可以把它设置成从一到一直加到嗯,大于二的32次方减一这样的一个数量。
02:18
保证这样的一个智能ID,那么第二种就是使用MD5算法,就是我们把这个把这个一个长串的这个URL,把它映射成一个。抽取,嗯,把它映射成一个非常短的一个字符,那其他我需要考虑的因素有,嗯,这是我这个短连接是否需要缓存?嗯,因为我考虑到热点数据了,比方说我这个链接,嗯,长链接有很多人去请求过来,那我就需要做一个缓存的方案,那么这个短链接的缓存是否也是,呃,需要有效期设置。静态资源的访问呢,也需要我去做一个代理,那我这个是否系统能不能实现好,考虑到以上的地方呢,我就开始了系统的设计。
03:02
那么代码部分呢,就下面是我的一些代码的截图,那我将会在我的idea中给大家详细的展示啊,这个代码是怎么设计的?那首先呢,我会有这样一个修link URL,我首先会根据我传进来的一个code来去给它生成一个URL,并且去返回,返回返并且去超,就是我这地方用的那个rerect,就是跳转,跳转到对应的页面,那么首先这是一个查询的操作嘛,我们看到它传进来是code的,我们在数据库里面是怎么设计的,就是我会先去red里面取,如果red里面没有根据这个code没有取到的话,那说明我要去查DB了啊,在DB里面查完之后呢,我要去做一个缓存,那我在DB里面去查的时候呢,我们就是直接根据这个code去拿到它对应的地址,其实我的设计是比较简单的啊,我们就去根据这个啊code去找到它orange的URL,在这里我给大家提一下,就是我这个数据表是怎么设计的。
04:06
在我这里面有一张修link的表,那么它的字段其实非常简单的,有一个原始的链接,那么这个是这个短链接的代码,那么就这么简单,就是我去根据这个短链接找到它的原原始链接啊,啊,那我们看完map之后呢,如果它这个原始链接不存在的话,我就直接扔出来一个异常啊,这是个查询的,那我添加的也是一样,就是添加的时候我会在这里面带上一个URL的,呃,请求参数,那我首先验证一下它是否是一个正常的URL,那完了之后呢,我会去帮它save save一下,那么在保存的时候呢,这个时候我调用了一下。我自己写这个估具类,就是去生生成这个原始链接啊,就是生成短链接,根据原始链接生成短链接,我们看一下方法是怎么实现的,那我们这里边是用到一个MD5哈希,就是我把这个长链接啊,MD5以下,它这个时候字符串其实是也是非常长的,那我在选取一个算法呢,我们就是把它啊选取最后生成的是六位,就是六位一个,六位一个啊六位的一个字符串,就是把它映射到原来这个常链接上面,嗯。
05:14
那么它生成的这样的一个code的之后,呃,就是生成了这样的一个code之后呢,我们再到实现内里面,那我们就把它这个code和它这个原始的链接,把它一起存储起来啊,就这么简单啊,其实就就主要是这两一个接口的核心的这个配置,那么我们最后把这个DEMO项目启动一下,我们去来测试一下效果。嗯。让我稍等一下attribute。
06:00
你有找到class。有点神奇,那在我第一次启动的时候,是之前的调试的过程中是没有问题的。啊,刚才的问题是因为我没有没有没有跟没有没有没有去构建,我在命令行里面就去执行了,这个没有构建之后啊,我在这个service里面就可以直接把这个服务给跑起来了。应该是在这个第八个里面,好,现在我们把控制台清出,清空,我们来到我们的自己的这个,呃,Controller里面,我们首先来测试一下,我们去根据跟这个根据这个URL去保存一个路径的啊,链接的方法我们一样的,我们来到我们的浏览器,我们来输入log host9000。Yourl short link ul等于,那么这个时候呢,我我就指向这个Co Co这个网址吧,看一下能不能成功的跳转过来,好,我们看到这个Co fair是直接跳转过来,那我们再来看一下这个它的控制台输出,然后这个里面呢,它其实就生成了一个这样的个code,叫这个,然我们把这个code复制过来,我们去根据这个code子看看能不能跳转,那么一样的,我们在这个里面,我们需要输入的是这个localhot啊九圈。
07:37
Short。Short link。那我们在这里面直接输这个我们刚才粘过来扣的,我们看看能不能跳转过去,那这个里边我们也实现了成功的跳转,所以呢,这个就是我们测试的一个效果,那么至于这个DB和master red,这在这里不断详细的展示的啊,需要注意的是就是我这个red里面的数据呢,它是就是在这个序列化的时候呢,可能有稍微有点设置的问题啊,后期会更新的,这这个就是这样的实现那个效果的,好,感谢大家。
我来说两句