短鏈接實(shí)現(xiàn)

經(jīng)常能看到某些站點(diǎn)會使用一些短鏈接,例如:t.cn/RyG7nlE這樣形式的鏈接。

短鏈接有以下好處:
1、短小精悍,方便推廣,記憶(實(shí)際應(yīng)該沒什么人去記憶吧);
2、可收集站點(diǎn)訪問數(shù)據(jù),用作數(shù)據(jù)分析等用途;
3、做了一層中轉(zhuǎn),可以做各種個(gè)性化定制,如設(shè)置鏈接開放日期等訪問控制的邏輯判斷;
4、節(jié)約空間,如微博會有字?jǐn)?shù)限制;


短鏈接一般會有兩種做法:

一、

自增序列算法,也叫永不重復(fù)算法,用到的其實(shí)就是多進(jìn)制,讓一個(gè)整型用多進(jìn)制表示,根據(jù)這個(gè)id查找對應(yīng)的長鏈接。
用數(shù)字100000000為例,以不同進(jìn)制表示:

進(jìn)制 結(jié)果 元素
2 101111101011110000100000000 [0-1]
8 575360400 [0-7]
10 100000000 [0-9]
16 0x5f5e100 [0-9a-f]
26 ikvozw [a-z]
36 1njchs [0-9a-z]
52 nJkmW [a-zA-Z]
62 6LAze [0-9a-zA-Z]

62進(jìn)制 [0-9a-zA-Z] 表示10000只需要3個(gè)字符,長度大大縮短。
可以估算一下,
232 < (25.5) 6 < 45.56 < 466 < 626

264 < (210 * 22/3) 6 < 16266 < 19326 < (62 * 625/6) 6 < 6211
由此可見,32位二進(jìn)制數(shù)字可用6位62進(jìn)制字符表示,64位二進(jìn)制數(shù)字可用11位62進(jìn)制字符表示,264 = 9,223,372,036,854,775,807,就是9百京,這個(gè)數(shù)量就非常足夠了。(原來比不上黃金弗利薩的戰(zhàn)斗力,有一個(gè)垓)

缺點(diǎn):根據(jù)自增id生成,長短可能會不一,這個(gè)也可以通過填充特定字符來解決。

二、

1、將長鏈接md5,獲取32位字符串;
2、32位字符串按分8字節(jié)4份,循環(huán)處理,作為16進(jìn)制數(shù)字和0x3fffffff(30個(gè)1)進(jìn)行位與操作(超過30位忽略);
3、30位分6段,每5位數(shù)字作為一個(gè)索引獲取集合[a-z0-9]中對應(yīng)的字符,最后獲得4個(gè)長度為6的字符串;
4、4個(gè)字符串中任意取一個(gè)作為短鏈接

缺點(diǎn):

1、生成的短鏈接可能會產(chǎn)生碰撞,據(jù)說微博是使用這種算法(上面的文字是我搬運(yùn)過來的,這個(gè)算法我不太懂它設(shè)計(jì)的原理。。。);
2、需要用字符串作為查詢條件去獲取長鏈接,容易數(shù)據(jù)庫索引建立不連續(xù),降低查詢效率;


我使用的是第一種,恰好我們的長鏈接中的信息也都是整型,只要轉(zhuǎn)化一下,再拼湊起來組成短鏈接就可以了,這樣就連數(shù)據(jù)庫hash表都可以不用建立。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文分析一下 ShortUrlService 的實(shí)現(xiàn)思路,結(jié)合 Yii 2.0 的 Service Locator...
    michael_jia閱讀 1,253評論 0 4
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,542評論 0 13
  • 『1』 我坐在長途客車的二層上,看著來給我送別的母親。第一次覺得她是那么的矮,那么的渺小...
    胡渣子大叔閱讀 415評論 3 12
  • 原創(chuàng) 2016 作者:繭 她不是一個(gè)善于交際的女子,所以回到舊城,最多只有一兩個(gè)可以打電話的朋友。 關(guān)上手機(jī),...
    魚家小二閱讀 925評論 0 0

友情鏈接更多精彩內(nèi)容