短链接系统如何设计

shigen坚持日更的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考,不断沉淀和成长。

今天给大家带来的文章是:《短链接系统如何设计》。在开始之前,先让我们熟悉一下什么是长链接:

shigen相信:这类系统大家都有遇到过,一看到就很头疼。要么是域名特别长,要么是带的参数特别多。那这样的自然就有很多的问题:

  1. 存在粘贴的时候粘贴不完全导致目标资源无法访问
  1. 太长了,导致我们使用三方服务,如:阿里云短信服务导致了额外的费用
  2. 部分业务系统表单提交url的时候有字符的长度限制

.......

以上就是我觉得长链接不太合适的地方,那如何的缩短或者简化一下长链接呢?这里的短链接系统的需求就应运而生。短链接系统设计代码全部放在了这里,需要的伙伴可自行查看。

我们先来分析一下短地址,这是shigen找到的在线的短地址生成的工具箱:

可以看到我给了一个很长的地址,转换之后,我的地址就很短了。是不是很神奇,更神奇的是我直接拿我的短地址就可以访问到我的长地址。好了,效果和功能都摆在了这里,具体的怎么实现呢?来和shigen一起进行系统设计。


在设计之前我们需要明确的问题和要点有:

🫢🫢🫢短链接的作用:

  1. 使链接更加的短
  2. 安全性的需求

🤔🤔短链接的算法

  1. 数据库自增的ID,ID的字段类型设计成int64,可以保存11位的数值
  2. MD5算法,生成一段字符串

🫤🫤其它考虑的点

  1. 短链接的缓存方案,使用懒加载;是否需要短链接的有效期
  2. 静态资源的访问,是否仍然可以反向代理

带着这些问题,shigen开始了系统的设计。

✊✊✊✊开始干活了!

短链接转长链接的工具类

这里主要是对长链接进行md5hash算法,得到一个长字符串,然后进一步采用算法,选取了其中的6个字符,作为长链接映射的code。

短链接实体定义

这个没啥好说的,和数据表的字段是对应的,关键的就是originUrlshortCode的映射。

短链接逻辑处理

这里的代码稍微多一点,主要是做了数据存储和数据查询的数据缓存。

一样,这样只适合单机模式,多实例模式还需要考虑数据库和缓存数据一致性问题。

对外的接口

这样,上边的代码写的差不多了,现在就需要编写接口进行测试了。

效果测试

就是两个接口,一个保存,一个查询的接口,我们来测试一下效果:

保存完毕之后,直接跳转到了新页面。页面跳转太快,效果就不好展示了!

一样,我用生成的code也可以访问:

在markdown中使用短链接引用静态资源:

检查一下DB:

  • mysql
  • redis

除了redis的数据序列化问题,可以看到我的效果是成功的实现了。


以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台 备注 链接
CSDN 知名博客平台,很少关注 shigen的CSDN主页
知乎 专注内容分享和问题解答 shigen的知乎主页
掘金 高质量博客平台 shigen的掘金主页
腾讯云开发者社区 腾讯云开发者社区 shigen的腾讯云开发者社区主页
微信公众平台 个人微信公众号,分享技术和日常 公众号名:shigen

shigen一起,每天不一样!

相关推荐
散一世繁华,颠半世琉璃2 分钟前
SpringBoot揭秘:URL与HTTP方法如何定位到Controller
spring boot·后端·http
安晴晚风1 小时前
从0开始在linux服务器上部署SpringBoot和Vue
linux·运维·前端·数据库·后端·运维开发
海绵波波1077 小时前
flask后端开发(10):问答平台项目结构搭建
后端·python·flask
网络风云8 小时前
【魅力golang】之-反射
开发语言·后端·golang
Q_19284999068 小时前
基于Spring Boot的电影售票系统
java·spring boot·后端
运维&陈同学10 小时前
【Kibana01】企业级日志分析系统ELK之Kibana的安装与介绍
运维·后端·elk·elasticsearch·云原生·自动化·kibana·日志收集
Javatutouhouduan12 小时前
如何系统全面地自学Java语言?
java·后端·程序员·编程·架构师·自学·java八股文
后端转全栈_小伵12 小时前
MySQL外键类型与应用场景总结:优缺点一目了然
数据库·后端·sql·mysql·学习方法
编码浪子13 小时前
Springboot高并发乐观锁
后端·restful
uccs13 小时前
go 第三方库源码解读---go-errorlint
后端·go