短链接系统如何设计

news2024/11/23 17:24:59

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

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

常见的长链接

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

  1. 存在粘贴的时候粘贴不完全导致目标资源无法访问

  2. 太长了,导致我们使用三方服务,如:阿里云短信服务导致了额外的费用

  3. 部分业务系统表单提交url的时候有字符的长度限制

…….

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

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

在线的短地址生成

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


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

🫢🫢🫢短链接的作用:

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

🤔🤔短链接的算法

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

🫤🫤其它考虑的点

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

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

✊✊✊✊开始干活了!

短链接转长链接的工具类

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

短链接实体定义

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

短链接逻辑处理

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

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

对外的接口

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

效果测试

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

保存链接

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

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

用code访问页面

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

在markdown中引用静态资源

检查一下DB:

  • mysql

mysql中的数据

  • redis

redis中的数据

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


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

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

shigen一起,每天不一样!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot讲义

SpringBoot 文档更新日志 版本更新日期操作描述v1.02021/11/14A基础篇 前言 ​ 很荣幸有机会能以这样的形式和互联网上的各位小伙伴一起学习交流技术课程,这次给大家带来的是Spring家族中比较重要的一门技术课程——SpringBoot。一句话介绍这个技术,…

【基于Kmeans、Kmeans++和二分K均值算法的图像分割】数据挖掘实验三

文章目录 Ⅰ、项目任务要求任务描述:主要任务要求: II、实现过程数据集描述实现描述具体实现过程 III、完整代码代码①代码② Ⅰ、项目任务要求 任务描述: 图像分割是图像处理和计算机视觉中重要的一环,在实际生活中得到了广泛的…

【C++】:关键字+命名空间+输入输出+缺省参数+函数重载+引用

【本节目标】 C关键字命名空间C输入&输出缺省参数函数重载引用 C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等 熟悉C语言之后,对C学习有一定的帮助,本章节主要目标&#xff…

2023年天猫淘宝双11红包活动入口是什么时候开始至什么时间结束?

​2023年淘宝天猫双11超级红包活动领取时间是从2023年10月24日20:00开始至11月11日23:59结束,淘宝天猫双十一活动时间内每天都可以领取1超级红包最高可得23888元。 2023年天猫淘宝双十一红包使用时间分为2个阶段:第一阶段是从2023年10月31日20:00开始至…

计算机指令、机器码

目录 背景 在软硬件接口中,CPU 帮我们做了什么事? 从编译到汇编,代码怎么变成机器码? 解析指令和机器码 总结延伸 背景 上大学的时候,我们系里教 C 语言程序设计的老师说,他们当年学写程序的时候&…

3.Python-用Python实现MySQL数据库的增删改查

题记 用python实现mysql数据库的增删改查,以下是具体的代码和操作步骤 安装flask模块 pip install flask 安装mysql.connector模块 pip install mysql-connector-python 编写app.py文件 app.py文件如下: 为什么显示不完整??&am…

【Spring】事务传播机制

事务传播机制 一. 事务传播机制是什么二. 为什么需要事务传播机制三. 事务传播机制有哪些四. Spring 事务传播机制演示1. ⽀持当前事务(REQUIRED)2. 不支持当前事务(REQUIRES_NEW)3. 不⽀持当前事务,NEVER 抛异常4. NE…

订单型企业经营分析指标大全(ODOO15/16)

ODOO-ERP搭建完成之后,我们重点是帮客户建立经营分析能力,以下是针对订单型企业的经营分析指标,涵盖业务运营的监控、资产构成、利润、盈亏点计算、资产运营效率等各方面,并且持续完善。 有些企业不重视,觉得自己企业小…

WebAPI+EF连接SQL Server数据库

右击解决方案-添加-新建项目-选择“类库(.NET Framework)”,新建的项目取名叫WebApi1.EF 添加EF: 新建一个ADO实体数据模型 选择DBFirst 数据源选择MySql 填写数据库地址及账号密码 选择实体框架版本 选择在数据库中的表User 到此配置完成&am…

对称加密和非对称加密以及CA证书

对称加密 对称加密只用到了公匙,这个公匙是消息的发送方和消息的接收方共享的,也就是消息发送方使用这个公匙对消息加密,然后接收方使用公匙对消息解密,最典型的例子比如像 encrypt 加密,比如我们有个 springboot 应用,需要对 application.yml 文件里的密码做加密,我们…

操作系统备考学习 day8 (2.4.1 ~ 2.4.4)

操作系统备考学习 day8 第二章 进程与线程2.4 死锁2.4.1 死锁的基本概念死锁产生的必要条件死锁什么时候会发生死锁的处理策略 2.4.2 死锁预防破坏互斥条件破坏不剥夺条件破坏请求和保持条件破坏循环等待条件 2.4.3 避免死锁银行家算法 2.4.4 死锁的检测和解除死锁的检测死锁的…

faster python之ctypes调用so/dll

目录 .so和.dll文件将go代码编译为动态链接库将C代码编译成动态链接库 ctypes库基础数据类型使用方法基本数据类型数组类型指针类型结构体类型嵌套结构体结构体数组结构体指针结构体指针数组 ctypes加载DLL的方式1. 使用 CDLL 类2. 使用 WinDLL 类(Windows特定&…

【LeetCode高频SQL50题-基础版】打卡第8天:第41~45题

文章目录 【LeetCode高频SQL50题-基础版】打卡第8天:第41~45题⛅前言好友申请II🔒题目🔑题解 2016年的投资🔒题目🔑题解 部门工资前三高的所有员工🔒题目🔑题解 修复表中的名字🔒题目…

深入JTS事务引擎:理论与实践相结合,掌握高效事务管理的秘诀

事务是可靠应用程序的构建块 如果您阅读过任何有关 J2EE 的介绍性文章或者书籍,那么就会发现,只有一小部分资料是专门针对 Java Transaction Service(JTS)或 Java Transaction API(JTA)的。这并不是因为 J…

[补题记录] Atcoder Beginner Contest 295(E)

URL:https://atcoder.jp/contests/abc295 目录 E Problem/题意 Thought/思路 Code/代码 E Problem/题意 给定长度为 N 的数组 A。进行如下操作: 若 Ai 0,将 Ai 等概率地变为 1 ~ M 中的任意一个数;对 A 排序; …

SQL及数据库基础知识点总结

一. SQL(Structured Query Language): 结构化查询语言。SQL语法不区分关键字的大小写,多条SQL语句必须以;分隔。 二. SQL的作用: SQL可以访问和处理数据库,包括数据的增删改查(插…

【实战项目之网页聊天室】

目录 项目背景 需求分析 1.用户管理模块 注册 登录 2.主界面 个人信息模块 会话列表模块 好友列表模块 消息区域模块 消息传输模块 添加好友模块 编写项目 1.创建项目添加依赖 2.配置项目信息 3.功能实现 用户管理模块 个人信息模块 好友列表模块 消息区…

FPmarkets:MT4中Renko图表工具有哪些?怎么用

以下FPmarkets总结的在MT4中使用Renko图表的最有趣的工具: 第一个是KT Renko实时图表指标,这是一个简单的指示器,仅显示砖块,未添加其他元素,因此与其他自定义指标和顾问兼容。 第二个是Renko Live Chart开发人员提供…

Kafka消费者使用案例

本文代码链接:https://download.csdn.net/download/shangjg03/88422633 1.消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响。Kafka 之所以要引入消费者群组…

源码选择指南:比较流行的同城外卖跑腿系统解决方案

随着现代生活的快节奏和数字化转型的浪潮,外卖和跑腿服务成为了不可或缺的一部分。不仅在城市,就连小镇和乡村也可以享受到这些便捷的服务。如果您计划开发或改进一个同城外卖和跑腿系统,选择适合的源码解决方案是至关重要的。在本文中&#…