首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >构建高效短链接: 原理、SQL 结构与示例代码

构建高效短链接: 原理、SQL 结构与示例代码

原创
作者头像
除除
发布2025-12-26 15:36:19
发布2025-12-26 15:36:19
1220
举报
文章被收录于专栏:除除的专栏除除的专栏
短链接生成原理
短链接生成原理

内容声明

本文仅用于技术分享和学习交流,内容不包含任何广告、推广、引流、付费课程或外链信息。所有示例和配置均为技术实践,欢迎参考和自定义。


本文介绍了短链接的生成与访问流程。通过将长链接转换为 MD5 HASH 值,检查数据库是否存在对应记录,若无则存入数据库并返回自增 ID。ID 转换为 26 进制字符串作为短链接的 Key。访问短链接时,服务器解析 Key,重定向至长链接。提供了 Node.js 代码示例,展示了 SQL 结构及 10 进制到 26 进制的转换方法。

一、背景

日常生活中经常通过网站链接来传播信息,但是在各种社交媒体或通讯软件中对单个信息的长度是有限制的,所以将一个长链接转换成短链接是个刚需功能。

社交媒体
社交媒体

二、短链接访问流程

  1. 浏览器访问短链接 https://www.example.com/t/kbkbkb
  2. 服务器拿到短链接 Key 值 kbkbkb,在库中找到相应的长链接地址 https://xxx
  3. 重定向到长链接 https://xxx

三、短链接生成原理

  1. 获取长链接,将链接转换 (MD5) 为 32 位 HASH 值。
  2. 查找数据库内是否已存在相应 HASH 值,若存在则说明之前已经生成过短链接,则返回已有的短链接。
  3. 若不存在相应 HASH 值,则将长链接入库并返回相应数据库自增的 ID。
  4. 将 10 进制的 ID 转换为 26 进制,例如: 1 => a、28 => ab。
  5. 将转换的 26 进制字符串作为短链接的 Key 值入库并返回,例如: ab => https://www.example.com/t/ab

附录: 代码参考 (Node.js)

SQL结构 (ORM) - Sequelize:

代码语言:javascript
复制
const TinyUrl = sqlIns.define('TinyUrl', {
  tiny_id: { // 自增 ID
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
  },
  ori_link: { // 长链接
    type: DataTypes.STRING(350),
  },
  ori_md5: { // 长链接 MD5 HASH
    type: DataTypes.STRING(40),
  },
  tiny_link: { // 短链接 https://www.example.com/t/abcdef
    type: DataTypes.STRING(30),
  },
  tiny_key: { // Key abcdef
    type: DataTypes.STRING(20),
  },
}, {
  tableName: 'tiny_url',
  createdAt: 'create_at',
  updatedAt: false
})

10 进制转换 26 进制:

代码语言:javascript
复制
function convert26(num) {
  return (num <= 26 ?
    String.fromCharCode(num + 64) :
    convert26(~~((num - 1) / 26)) + convert26(num % 26 || 26)).toLowerCase();
}

convert26(1) // "a"
convert26(28) // "ab"

附录二: 示例 (Demo)

Demo
Demo

更新记录

本文首次编辑于 2021-01-10,最近更新于 2025-12-26。

版权声明

本文为原创文章,作者保留版权。转载请保留本文完整内容,并以超链接形式注明作者及原文出处。

作者: 除除

原文: http://blog.mazey.net/1798.html

(完)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、短链接访问流程
  • 三、短链接生成原理
  • 附录: 代码参考 (Node.js)
  • 附录二: 示例 (Demo)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档