生成短链接

扫描二维码 上传二维码
选择防红平台类型,避免链接被拦截
选择允许访问的平台类型

短链接是如何把长地址变短的

当一条冗长的 URL 被压缩成「suo.run/3Kq9xB」这样的六字符短码时,背后是一场极简与极繁的优雅博弈。
——欢迎来到「快缩短网址」。



一、化繁为简:短链诞生的瞬间
想象一条 200 字节的原始链接,在营销短信里占据半屏江山。我们只需一次 POST 到 suo.run/api/shorten,便能在毫秒之间得到一枚轻若鸿毛的短码。HTTP 对话如下:

POST /api/shorten
Content-Type: application/json
{"url":"https://very-long-story.com/once-upon-a-time-in-the-internet"}

200 OK
{"short":"https://suo.run/3Kq9xB"}

二、算法之舞:从 0 到 62⁶
短码的字符集仅 62 枚:0-9、a-z、A-Z。
我们把数据库里的自增主键视为一颗不断生长的「种子」。每当新长链抵达,种子 +1,随后用 Base62 编码将十进制映射为六十二进制字符串。
六位数即可容纳 62⁶ ≈ 568 亿种排列——足够让地球上每粒沙子都拥有专属门牌。

核心片段(已拂去尘埃)
private static final String BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

static String toBase62(long id) {
StringBuilder sb = new StringBuilder();
while (id > 0) {
sb.insert(0, BASE62.charAt((int)(id % 62)));
id /= 62;
}
return sb.toString();
}

反向解码亦只需将字符映射回权重,乘幂累加即可。

三、细节里的微光
1. 长度焦虑
当主键突破 568 亿,短码自然增至 7 位。通过「稀疏发号」——如每次步进 1000——可延缓膨胀,亦可在未来无痛升级至 7 位或 8 位。

2. 随机迷雾
把 62 个字符的顺序洗牌,短码便失去了可预测性,窥探者再难按图索骥。



3. 一链一码 or 一链多码
若坚持「同一长链永远返回同一短码」,可先对长链做 MD5,再查表去重;否则自增序列天然支持「一链多码」,为 A/B 测试、渠道溯源留下空间。

4. 301 与 302 的抉择
301 永久重定向,浏览器缓存后不再打扰服务器,节省流量;302 临时重定向,每次点击都会回源,便于统计。在数据即燃料的时代,我们选择 302,让每一次跳转都化作可分析的星火。

5. 缓存之翼
高频访问的短码被 Redis 温柔地揽入怀中,命中率九成以上,数据库得以在深夜安然入睡。

至此,一条庞然长链被驯服为指尖轻触即可抵达的短码。
若你也想让故事更短,世界更近——
suo.run,正在等你。