專業(yè)的短鏈接生成工具
鏈接域名
短網(wǎng)址有效期
最通俗易懂的短鏈接原理講解
更新時(shí)間:2025-3-28 00:10:33 作者:愛短鏈
這種營銷短信大家應(yīng)該都收到過,短信有最大字符限制,而且為了更好的觀感體驗(yàn),短信里的鏈接一般都很短?,F(xiàn)成的短鏈接生成服務(wù)也比較多,比如新浪、百度等,谷歌之前也有短鏈接服務(wù),號(hào)稱是最快的,但是在 2018 年關(guān)閉了。
一、短鏈接原理
我們點(diǎn)擊短鏈接會(huì)發(fā)起一個(gè) GET 方式的 HTTP 請(qǐng)求,當(dāng)請(qǐng)求到對(duì)應(yīng)的 API 后,會(huì)解析短鏈接里的標(biāo)識(shí)獲取到對(duì)應(yīng)的長鏈接,然后重定向到長鏈接,這樣整個(gè)流程就結(jié)束了。
比如我用新浪的短鏈接服務(wù)為 https://www.google.com/ 生成了一個(gè)短鏈接:http://dwz.date/evn,下面是請(qǐng)求短鏈接時(shí)對(duì)應(yīng)的 HTTP 信息:
點(diǎn)擊立即使用↓↓↓
愛短鏈助力營銷推廣
二、短鏈接生成算法
短鏈接標(biāo)識(shí)一般是 [0-9, a-z, A-Z] 隨機(jī)組合而成的字符串,字符一共有 62 個(gè),因此短鏈接標(biāo)識(shí)可以用 62 進(jìn)制的字符串表示。
首先維護(hù)一個(gè)自增的 ID,當(dāng)生成短鏈接時(shí),將 10 進(jìn)制的自增 ID 轉(zhuǎn)換成 62 進(jìn)制字符串,這個(gè)字符串就可以唯一標(biāo)識(shí)一個(gè)長鏈接。由于 ID 是自增的,對(duì)應(yīng)的 62 進(jìn)制字符串是不同的,這樣就不會(huì)出現(xiàn)一個(gè)短鏈接對(duì)應(yīng)多個(gè)長鏈接的問題,62 個(gè)字符排列組合,可以保證短鏈接是用不完的,就算僅限于 6 位長度標(biāo)識(shí)的短鏈接,也有 558 億多種情況,這種算法在網(wǎng)上被稱為自增序列算法。
維護(hù)自增 ID 主要有以下幾種方式:
數(shù)據(jù)庫主鍵自增
redis 自增
分布式自增主鍵 ID(雪花算法,存在 ID 浪費(fèi))
下面是 62 進(jìn)制的 encode 與 decode 方法,來自 Base62。
三、一些細(xì)節(jié)
自增序列算法也存在一定的缺點(diǎn),當(dāng)自增主鍵很大時(shí),生成的 62 進(jìn)制字符串會(huì)變長,以 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 順序的 62 進(jìn)制為例,當(dāng)主鍵大于 56800235583 時(shí),會(huì)生成 7 位長度的 62 進(jìn)制字符串。這個(gè)問題可以通過控制自增主鍵的增長速度來解決,而且要避免主鍵浪費(fèi)。
62 進(jìn)制的順序并不一定嚴(yán)格按照 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 的順序來表示,這個(gè)順序可以是打亂的,這樣生成的短鏈接標(biāo)識(shí)更隨機(jī)不易被破解。
長鏈接與短鏈接是否需要一對(duì)多關(guān)系,同一個(gè)長鏈接使用自增主鍵 ID 算法生成的短鏈接是不同的,因?yàn)樽栽鲋麈I ID 不同,生成的 62 進(jìn)制字符串自然也不同。如果我們有一個(gè)長鏈接唯一對(duì)應(yīng)一個(gè)短鏈接需求,可以將長鏈接進(jìn)行 md5 加密,將加密后的 md5 值存儲(chǔ)在 DB 中,每次生成短鏈接前都根據(jù)長鏈接 md5 值查詢 DB,如果存在,則直接返回短鏈接,當(dāng)然也可以使用其他方式維護(hù)這種關(guān)系。
跳轉(zhuǎn)用 301 還是 302,301 永久重定向,302 是臨時(shí)重定向。短地址一經(jīng)生成就不會(huì)變化,所以用 301 是符合 http 語義的。同時(shí)對(duì)服務(wù)器壓力也會(huì)有一定減少。
但是如果使用了 301,我們就無法統(tǒng)計(jì)到短地址被點(diǎn)擊的次數(shù)了。而這個(gè)點(diǎn)擊次數(shù)是一個(gè)非常有意思的大數(shù)據(jù)分析數(shù)據(jù)源。能夠分析出的東西非常非常多。所以選擇 302 雖然會(huì)增加服務(wù)器壓力,但是我想是一個(gè)更好的選擇。from 短 URL 系統(tǒng)是怎么設(shè)計(jì)的? by iammutex
如果短鏈接請(qǐng)求頻繁,可以借助 redis 做對(duì)應(yīng)的緩存優(yōu)化。
愛短鏈平臺(tái)各工具使用方法及功能匯總 | |
短鏈接 | 活碼 |
微信外鏈 | 抖音卡片 |