最通俗易懂的短链接原理讲解

从零实现一个短链接项目 短链接就是短网址,是在长度上比较短的网址。简单来说就是帮您把冗长的URL地址缩短成8个字符以内的短网址。当我们在腾讯、新浪发微博时,有时发很长的网址连接,但由于微博限制字数,所以微博就自动把您发的长网址给转换成短网址了。在和手机提醒等限制字数的地方来使用短网址,的确是一个不错的方案。 阅读详情
AI摘要

本文解析了短链接服务的工作原理,包括短链接生成算法、短链接标识的62进制编码方法,以及如何通过自增序列算法确保短链接的唯一性。探讨了短链接在营销短信中的应用,以及短链接服务提供商如新浪、百度等。文章还讨论了短链接的跳转机制、优化策略及可能存在的问题。

看业务代码的时候,有些逻辑用到了短链接服务,感觉还蛮有意思的,这里简单的记录一下。

这种营销短信大家应该都收到过,短信有最大字符限制,而且为了更好的观感体验,短信里的链接一般都很短。现成的短链接生成服务也比较多,比如新浪、百度等,谷歌之前也有短链接服务,号称是最快的,但是在 2018 年关闭了。

一、短链接原理

我们点击短链接会发起一个 GET 方式的 HTTP 请求,当请求到对应的 API 后,会解析短链接里的标识获取到对应的长链接,然后重定向到长链接,这样整个流程就结束了。

比如我用新浪的短链接服务为 https://www.google.com/ 生成了一个短链接:http://dwz.date/evn,下面是请求短链接时对应的 HTTP 信息:

二、短链接生成算法

短链接标识一般是 [0-9, a-z, A-Z] 随机组合而成的字符串,字符一共有 62 个,因此短链接标识可以用 62 进制的字符串表示。

首先维护一个自增的 ID,当生成短链接时,将 10 进制的自增 ID 转换成 62 进制字符串,这个字符串就可以唯一标识一个长链接。由于 ID 是自增的,对应的 62 进制字符串是不同的,这样就不会出现一个短链接对应多个长链接的问题,62 个字符排列组合,可以保证短链接是用不完的,就算仅限于 6 位长度标识的短链接,也有 558 亿多种情况,这种算法在网上被称为自增序列算法。

维护自增 ID 主要有以下几种方式:

  1. 数据库主键自增
  2. redis 自增
  3. 分布式自增主键 ID(雪花算法,存在 ID 浪费)

下面是 62 进制的 encode 与 decode 方法,来自 Base62。

    private static String base62(Long b10) {
        StringBuilder ret = new StringBuilder();
        while (b10 > 0) {
            ret.insert(0, characters.charAt((int) (b10 % 62)));
            b10 /= 62;
        }
        return ret.toString();
    }

    private static long decodeBase62(String b62) {
        long ret = 0;
        b62 = new StringBuffer(b62).reverse().toString();
        long count = 1;
        for (char character : b62.toCharArray()) {
            ret += characters.indexOf(character) * count;
            count *= 62;
        }
        return ret;
    }

三、一些细节

  1. 自增序列算法也存在一定的缺点,当自增主键很大时,生成的 62 进制字符串会变长,以 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 顺序的 62 进制为例,当主键大于 56800235583 时,会生成 7 位长度的 62 进制字符串。这个问题可以通过控制自增主键的增长速度来解决,而且要避免主键浪费。
  2. 62 进制的顺序并不一定严格按照 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 的顺序来表示,这个顺序可以是打乱的,这样生成的短链接标识更随机不易被破解。
  3. 长链接与短链接是否需要一对多关系,同一个长链接使用自增主键 ID 算法生成的短链接是不同的,因为自增主键 ID 不同,生成的 62 进制字符串自然也不同。如果我们有一个长链接唯一对应一个短链接需求,可以将长链接进行 md5 加密,将加密后的 md5 值存储在 DB 中,每次生成短链接前都根据长链接 md5 值查询 DB,如果存在,则直接返回短链接,当然也可以使用其他方式维护这种关系。
  4. 跳转用 301 还是 302,301 永久重定向,302 是临时重定向。短地址一经生成就不会变化,所以用 301 是符合 http 语义的。同时对服务器压力也会有一定减少。
    但是如果使用了 301,我们就无法统计到短地址被点击的次数了。而这个点击次数是一个非常有意思的大数据分析数据源。能够分析出的东西非常非常多。所以选择 302 虽然会增加服务器压力,但是我想是一个更好的选择。from 短 URL 系统是怎么设计的? by iammutex
  5. 如果短链接请求频繁,可以借助 redis 做对应的缓存优化。

PS:做一次标题党,师承 SCDN 官方😂

短链接技术解析:链接的简化之道 短连接的发展可以追溯到互联网初期,当时用户在分享长URL时面临繁琐和不便。为了解决这一问题,短连接服务应运而生。最早的服务如TinyURL和bit.ly为用户提供了将长URL转换为短连接的便捷方式,成为了这一概念的奠基石。 阅读详情

相关推荐

微博短链接原理

1. 什么是短链接  顾名思义,短链接即是长度较短的网址。通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在诸如微博,BBS等对帖子字数有限制的网站,通过使用短链接,用户可以把注意力放在帖子的内容上,而不是在担心链接超长的问题。这里以百度的 dwz.cn 短链接服务为例,我们使用百度搜索”hello world”,链接为h

nullllun的专栏 2421

短链是什么原理?怎么实现呢?

301其实是比较符合HTTP协议语义的,但浏览器会缓存目标网址,下次访问时会直接跳过短链,跳转到目标网址,无法做一些统计,比如短链访问次数等。常用的自增序列算法有雪花算法、Redis自增、MySQL主键自增等,生成唯一ID后,再转换为62进制字符串,转换后的62进制字符串可用作短链。原理还是很简单的,其实就是在后台保存有短链和长链的映射关系,然后进行重定向,让浏览器跳转到对应的长链接。302:浏览器访问时,会先后访问短链代理服务和目标服务,对服务器的压力也就相应大些,但可以做一些统计。

lingbomanbu_lyl的博客 9226

Prompt工程实战:告别无效关键词,让大模型生成高质量技术内容

很多开发者在使用大语言模型(LLM)生成技术文章、项目文档或代码注释时,常常会遇到一个令人困惑的问题:明明在提示词(Prompt)里包含了“场景关键词”、“提示词工程”甚至“模型”等看似专业的词汇,但AI生成的内容依然质量低下,要么泛泛而谈,要么逻辑混乱,要么干脆答非所问。 这背后的原因并非AI能力不足,而是我们与AI的“沟通方式”出了问题。就像你让一个刚入职的新人“写一份报告”,他可能无从下手;但如果你告诉他“写一份关于上周项目A性能瓶颈分析的复盘报告,包含问题现象、根因分析、解决方案和后续预防措施,用M

weixin_34008784的博客 360

短链接是怎么设计的?带你入门

说到 URL 你肯定不陌生,浏览器输入一段 URL,立马就跳转到你想要的网站,不过你应该也遇到过一些带了很多参数、特别长的 URL,看起来就乱糟糟的,能不能把它变短一点? 首先你要知道的是,长链是没法压缩成短链的,那我们这里怎么设计短链?

持之以恒 6301

RAGFlow源码解析-2、从源码构架ragflow v0.25.0镜像

本文详细记录了从零开始构建自定义RAGFlow镜像lt/ragflow:0.25.0的全过程。首先介绍了环境准备,包括检查Node.js、Docker版本和项目结构。然后详细说明了构建步骤:编译前端、创建自定义Dockerfile、构建镜像和验证。接着讲解了docker-compose配置修改要点,包括网络定义、MySQL依赖处理等。最后总结了部署过程中遇到的五个关键问题及解决方案,包括networks未定义、MySQL服务依赖、tiktoken文件缺失、数据库配置错误和端口映射问题。通过完整的操作流程和问

liutao841204的专栏 364

ARM学习 | 紧耦合存储器 (TCM)

TCM 是一种专用的片上存储器,直接与处理器核心耦合。确定性访问:由于不涉及缓存替换或一致性管理,访问延迟固定。高带宽:TCM 通常通过专用总线连接处理器核心,可以提供更高的数据吞吐率。用户管理:TCM 的分配和管理完全由开发者控制,不依赖硬件缓存策略。ARM 处理器中的 TCM 通常分为ITCM(指令紧耦合存储器)和DTCM(数据紧耦合存储器),分别用于存储指令和数据。TCM 是 ARM 处理器中不可忽视的重要特性,在实时系统和高性能嵌入式应用中具有重要地位。

qq_43167806的博客 3329

通俗易懂讲解RPC、SpringCloud、Dubbo、Zookeeper、Hadoop、hive等概念的区别

文章目录1. RPC2. Hadoop3. SpringCloud和Dubbo4. Zookeeper5. 总结 1. RPC RPC是一个远程调用的技术方式,其可以通过HTTP协议实现,也可以是基于SOCKET自己定义新的协议。其本质是为了让机器在进行远程调用的时候,不需要知道具体是从哪台机器调用,从而实现了服务的解耦。RPC本质上就实现了两个功能,一个是通过socket等实现的网络传输、一个是数据的序列化和反序列化。 RPC 和 HTTP 调用是没有经过中间件的,它们是端到端系统的直接数据交互。HTT

weixin_43899069的博客 1156

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

面试中经常问到的 长连接&短连接,你了解的多吗?

“只分享实战、实用 技术干货”Hello,大家好。我是公众号“八点半技术站”的小编-Bruce.D。今天是周三(2020-04-29),分享一句谚语 “书读百遍,其义自见”。分享给大...

八点半技术站 1363

英飞凌TC397芯片时钟树详解:从EB-tresos配置到PLL锁相环实战避坑

本文详细解析了英飞凌TC397芯片的时钟树架构,从EB-tresos配置到PLL锁相环的实战应用,帮助工程师避免常见配置陷阱。文章深入探讨了时钟源层、频率转换层和分配网络层的设计原理,提供了PLL配置的数学公式和EB-tresos关键容器的配置要点,并分享了调试技巧与性能优化实践,适用于MCU开发中的时钟管理需求。

weixin_42524226的博客 212

内网Linux服务器离线安装python包

3、将下载的依赖包和requirements.txt 拷贝到内网主机,依赖包和requirements.txt放同一级目录,进入该目录,运行指令。其实还有个更加方便的办法,联网主机装个与内网主机一样环境的虚拟机,在虚拟机中下载py包,拷贝到内网主机后就能直接安装了,省去手动下载py包的步骤。简单记录下最近遇到的一个小问题,内网主机没有内网源,处于无互联网状态,安装python包只能通过联网主机下载好后拷贝到内网主机。由于内网主机安装了多个版本的python,为了防止搞错,使用这种方式来调用pip安装。

cyc头发还挺多的博客 651

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

本文引用了简书作者“骑小猪看流星”技术文章“Cookie、Session、Token那点事儿”的部分内容,感谢原作者。 1、前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现。Http短连接主要用于从服务器读取各种...

weixin_34014277的博客 1669

C# 从数秒到毫秒:MySQL+Redis百万数据优化实战全解析

在处理百万级数据时,传统单体数据库常面临查询效率低下、数据库负载过高和用户体验差等问题。为解决这些性能瓶颈,可以采用MySQL分库分表、Redis缓存和异步统计的组合策略。 数据库分片:通过水平分表和分库实现,将单表数据分散到多个物理表或数据库实例中,降低单点负载。 Redis缓存:利用Redis缓存高频数据,减少数据库查询压力,提升响应速度。 异步统计:通过消息队列(如RabbitMQ)解耦统计任务,后台处理非实时任务,避免阻塞主流程。 这些优化策略能够显著提升系统性能,确保在高并发和大数据量场景下的稳定

墨夶的博客 852

InternLM2-Chat-1.8B效果展示:技术面试题生成、算法解析、LeetCode解题思路

本文介绍了如何在星图GPU平台自动化部署【书生·浦语】internlm2-chat-1.8b镜像,并展示其作为技术面试助手生成编程题、解析算法和提供LeetCode解题思路的典型应用场景。该模型能高效生成面试题目、讲解动态规划等复杂算法,并提供多种解题方案,帮助开发者提升面试准备效率。

weixin_32999557的博客 221

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

文本实现ESP32S3 SparkBot与豆包大模型的RTC连续对话

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4365

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

背完八股仍被挂?应届生面试真正卡人的是这些

朋友们,如果你正在准备2026 校招/春招/秋招,建议先放下手里那本刷了无数遍的 Java 面试八股文。这篇文章可能会颠覆你的认知。每年都有大批同学来找我吐槽:“我把 Redis 五种数据类型背得滚瓜烂熟,TCP 三次握手四次挥手倒背如流,LeetCode 刷了 300+,结果面试还是挂了!除了死记硬背,你真实理解什么、解决过什么,我当场就懵了。这事儿真不怨你。就像你背熟了驾考宝典,一上车考官让你实操侧方停车,你总不能只背定义吧?现在的技术面试,早就不是八股默写大赛了。

人工智能AI技术 390

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

小白必读:闲话HTTP短连接中的Session和Token

本文引用了刘欣的文章,感谢原作者的分享。 1、引言 Http协议在现今主流的IM系统中拥有无可替代的重要性(在IM系统中用HTTP发起的连接被大家简称为http短连接),但Http作为传统互联网信息交换技术,一些典型的概念比如:Session、Token,对于新手程序员来说很陌生。 很多文章动辄长篇大论、高屋...

weixin_34015566的博客 290

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java面试高效准备:构建知识图谱与场景拆解实战

在软件工程领域,面试准备的核心在于将零散的技术知识点系统化,形成解决实际问题的能力。其原理在于通过构建以核心问题域(如性能、一致性、可用性)为导向的知识图谱,将Java基础、JVM、并发、MySQL、Spring等技术模块有机串联,而非孤立记忆。这种方法的技术价值在于能高效应对跨领域综合场景题,提升解决方案的结构性与深度。应用场景广泛覆盖中高级Java工程师的技术面试,特别是在面对系统设计、底层原理追问时,能快速定位知识锚点,给出层次清晰的回答。本文聚焦Java面试准备,深入探讨如何通过知识图谱构建、三段式

405

ZySec-7B:大模型如何赋能安全团队,从漏洞分析到合规审计的10大实战场景

大语言模型(LLM)作为人工智能领域的前沿技术,通过在海量文本数据上进行预训练,掌握了强大的语言理解和生成能力。其核心原理是基于Transformer架构,通过自注意力机制捕捉上下文关联,从而能够完成问答、摘要、代码生成等复杂任务。在工程实践中,LLM的价值在于能够自动化处理大量重复性、结构化的文本工作,显著提升知识密集型行业的效率。在网络安全这一典型应用场景中,传统安全团队常面临漏洞分析、合规审计、事件响应等海量文档工作的压力。通过领域微调技术,将安全专业知识(如漏洞库、攻击模式、合规标准)注入通用大模型

defkaug153461的博客 419

探究短链接生成算法

在互联网时代,链接是连接用户和信息的桥梁,而长链接可能会因为过长、难记、不美观等问题影响用户体验,因此短链接的出现填补了这一空缺。短链接是将原始的长链接通过一定的算法转换成短字符串,从而实现了链接的简洁化,提高了用户的点击率和转化率。短链接的应用场景十分广泛,包括微博、微信、推特等社交媒体平台、电商推广、移动应用内的分享等。

fudaihb的博客 4116

短链原理是什么?怎么实现呢?

原创 活力满满Nick发表于广东知识赋能,共同成长,平时主要会分享两个板块的知识: 1、理财保险类:保险专业知识、金融政策、法律常识、职业成长规划、副业探索等。2、Java相关技术知识:高性能编程专题、中间件专题、分布式系统开发专题、微服务专题。36篇原创内容公众号一、为什么需要短链二、短链跳转访问原理三、短链生成实现方案1、自增序列算法2、Hash算法四、代码示例1、表结构及索引2、外部依赖4、DAO层5、业务层五、测试用例。

竹林幽深 1085

短链接生成原理

顾名思义,短链接就是长度比较短的链接。通过短链接技术,我们可以将长度比较长的链接压缩成长度相对较短的链接,并通过跳转的方式,将用户请求由短链接重定向到长链接。

我滴小博客 3159
上一篇: Spring AOP 源码系列(一)解析 AOP 配置信息
下一篇: 深入理解 Java 泛型擦除机制
留兰香丶
博客等级 码龄9年 391粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值