短链的基本工作原理描述与实现方案

短链是什么

短链就是普通的长链(普通URL网址)经过一定的处理得到的一个简短且唯一的网址字符串。

 

短链跳转的基本原理

客户端访问短链网址服务器,短链网址服务器返回对应长链地址和302响应码,客户端收到响应后重定向访问长链地址服务器。以腾讯云的短链为例,访问短链:https://url.cn/5y3z8VK

可以很清晰的看到整个短链跳转的过程。

这里说一下301响应码和302响应码:

301代表永久重定向,也就是第一次重定向以后就会从浏览器缓存中获取重定向地址,下次直接访问;

302代表临时重定向,客户端每次都会重新请求后端获取重定向地址。

 

短链实现的步骤

了解短链跳转的基本原理以后,实现短链就很简单了。

  1. 部署一个短链域名解析服务(也可以是系统中的一个模块)用来生成短链并存储短链和长链的映射关系
  2. 客户端请求短链域名解析服务,服务拿到短链后取出对应的长链返回给客户端即可
  3. 客户端拿到长链后进行重定向访问

 

使用哈希算法生成短链

        短链格式:固定短链域名+哈希值(在https://url.cn/5y3z8VK中,url.cn就是短链域名,5y3z8VK就是哈希值)

        固定短链域名就是我们部署的短链域名解析服务的请求地址,哈希值就是请求参数,也就是长链经过某种hash运算之后算出来的一个唯一的hash字符串,短链域名解析服务拿到这个哈希值找到对应的长链返回。

        我们在对长链做hash运算的时候,因为它仅仅只一个网址而已,所以不用关心反向解密的难度,不需要使用MD5等加密算法,关注点应该放在哈希的运算速率和哈希冲突概率(两个不同的链接算出的hash值如果一样就需要一些其他额外的处理手段),这里哈希算法的的选择可以自己调研一下然后进行选择。

        拿Google的MurmurHash算法举例,MurmurHash算法的说明:http://en.wikipedia.nym.tw/wiki/MurmurHash#cite_note-4

        MurmurHash算法当前的最新版本是MurmurHash3,提供了32bit和128bit两种长度的hash值。MurmurHash运算出来hash值是无符号的十进制数,为了进一步缩短哈希值的长度,可以将MurmurHash运算出来的结果转为62进制(数字 + 小写字母 + 大写字母)。

         解决哈希冲突:如果使用MySQL存储长链和短链的映射关系,可以给短链加上唯一索引,将长链和由长链生成的短链插入到数据库中时,如果失败,就说明短链已经存在,hash冲突了,此时可以在长链地址末尾加上一个预先定义好的字符串,再次算出短链,如果还是冲突就继续拼接再次运算直到不冲突为止,取出长链的时候再把末尾拼接的字符串去掉即可。

 

其他方法生成短链

  • 使用snowflake算法,然后再转为62进制
  • 使用MySQL全局数据库自增主键,然后再转为62进制(存在单机瓶颈问题)
  • 使用MySQL相同步长自增主键方案
  • 使用UUID
  • 使用redis做全局自增(redis宕机自增数据丢失)
  • 其他自定义算法

 

为什么要使用短链

  • 短链更短,在一些对内容长度有限制的平台上发文的时候,可编辑的文字就多了
  • 链接太长在某些平台上会出现识别不完整或者无法识别为超链接的问题
  • 短信中的长链接可能会导致短信被拆分发送,用短链可以降低成本
  • 短链生成的二维码相对松散,更加容易识别

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot是一个开源的Java框架,可以简化Java应用程序的开发。它提供了很多方便的功能,可以帮助我们快速构建稳定可靠的应用程序。 要实现短链生成和统计,可以借助SpringBoot的特性和第三方库来完成。以下是一个基本实现思路: 1. 短链生成 首先,我们需要设计一个用于生成短链的算法或方法。常见的方法是将长链接通过哈希算法转换为短字符串。你可以选择使用MD5、SHA1等哈希算法,并取其中一部分字符作为短链接。另外,为了避免生成过长的短链,可以将其进一步进行压缩。 在SpringBoot中,可以通过创建一个生成短链的Controller来实现。Controller接收长链接作为参数,调用短链生成的方法,然后将生成的短链接返回给前端。 2. 短链重定向 当用户点击短链接时,服务器需要将其重定向到原始的长链接地址。可以在SpringBoot中创建一个Controller,设置一个路由映射,并在该Controller中获取短链接对应的长链接,然后进行重定向。 3. 统计短链点击量 为了统计短链的点击量,我们可以在数据库中创建一个表,用于记录短链的相关信息,例如短链、长链接、点击次数等。 在SpringBoot中,可以定义一个点击事件的Controller,当用户点击短链时,将触发该Controller。该Controller负责将点击事件信息保存至数据库,并更新短链对应的点击次数。 以上是一个基本实现思路,你可以根据具体需求和场景进行进一步的优化和改进。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值