短址 short URL 原理及其實現

2021-08-27 01:21:00 字數 2266 閱讀 6251

前言:

最近看了一些關於短址(short url)方面的一些部落格,有些部落格說到一些好的東西,但是,也不是很全,所以,這篇部落格算是對其它部落格的乙個總結吧。

介紹:

短址,顧名思義,就是把長的 url 轉成短的 url, 現在提供這種服務的有很多公司,我們以google家的 url shortener 服務:為例。

首先我們到,然後把本文部落格的位址

teng輸入進去,最後它會返回乙個更短的url,jfs6q。如下圖所示:

url 解析:

當我們在瀏覽器裡輸入jfs6q時,dns首先解析獲得的ip位址。當dns獲得ip位址以後(比如:74.125.225.72),會向這個位址傳送http get請求,查詢jfs6q, 這個時候,伺服器會把請求通過http 301轉到對應的長url

teng。後面的解析過程就和平常**解析是一樣的了。

短址本質:

短址本質上是實現了乙個對映函式 f: x -> y。而這個對映函式必須同時具有兩個特點:

1. 如果 x1 != x2, 則 f (x1) != f(x2);

2. 對於每乙個 y, 能夠找到唯一的乙個 x 使得 f(x) = y;

對於任何的線性函式,比如 f(x) = 2x,都滿足這樣的條件。

好了,如果了解了短址的本質,我們再來看它是如何實現的。

註明:在googleurl shortener 服務中,它允許乙個長 url 對應多個短的url。這可能是出於安全上的考慮。在本文中,我們不考慮這種情況。

實現:

短址的長度一般設為 6 位,而每一位是由 [a - z, a - z, 0 - 9] 總共 62 個字母組成的,所以6位的話,總共會有 62^6 ~= 568億種組合,基本上夠用了。在googleurl shortener 服務中,短址長度為 5,大概有9億多種組合.

1. id,int, 自動增長;

2. lurl,varchar, // 長url;

3. surl, varchar, // 短url。

現在我們考慮通過如何長url得到唯一的短url。

在講具體演算法以前,先提乙個問題:10進製數和16進製制數之間的轉換是否滿足剛剛提到的對映函式f: x -> y中的兩個條件?

答案: 是。

本文的思路也是利用進製之間的轉換。

因為我們總共有 62 個字母,我們可以自創一種進製,叫做 62 進製。其規則如下:

0  → a

1 → b

...25 → z

...52 → 0

61 → 9

所以,對於每乙個長位址,我們可以根據它的id,得到乙個6位的 62 進製數,這個6位的 62 進製數就是我們的短址。具體實現如下:

public arraylistbase62(int id) 

return value;

}

舉例:

對於 id = 138,通過 base62(138), 我們得到 value = [14, 2]。根據上面的對應規則表,我們可以得到其對應的短址為:aaaabn 。(由 value 得到具體的短址,可以通過switch 語句得到,因為**太長,在此略過。)

當我們想通過短址找到所對應的長位址,方法也很簡單,就是把62進製數轉成10進製數即可,這樣我們就可以得到長位址的id了。**如下:

public static int base10(arraylistbase62) 

int id = 0;

int size = base62.size();

for (int i = 0; i < size; i++)

return id;

}

比如,對於短址aaae9a,其62進製為[0, 0, 0, 4,61,0] ,則其長位址的id 為[0, 0, 0, 4,61,0]= 0×62^5+0×62^4 +0×62^3 +4×62^2 + 61×62^1 + 0×62^0 = 1915810。

有了id,我們自然就可以得到長位址了。

參考:本文演算法**)

teng

短址原理及其實現

url 演算法google 資料庫瀏覽器 伺服器 前言 最近看了一些關於短址 short url 方面的一些部落格,有些部落格說到一些好的東西,但是,也不是很全,所以,這篇部落格算是對其它部落格的乙個總結吧。介紹 短址,顧名思義,就是把長的 url 轉成短的 url,現在提供這種服務的有很多公司,我...

ARP原理及其實現方法

arp原理及其實現方法 在區域網中,是通過arp協議來完成ip位址轉換為第二層實體地址 即mac位址 的。arp協議對網路安全具有極其重要的意義。通過偽造ip位址和mac位址實現arp欺騙,能夠在網路中產生大量的arp通訊量使網路阻塞。arp協議是 address resolution protoc...

跳表的原理及其實現

作用 目的 跳表作為一種資料結構通常用於取代平衡樹。起因平衡樹可以用於表示抽象的資料型別如字典和有序鍊錶,它通過樹旋轉 tree rotation 操作強制使樹結構保持平衡來保證節點搜尋的效率。在資料為隨機插入的情況下,平衡樹效能表現良好 但資料為順序插入或者需要刪除節點的情況下,平衡樹的效能就會有...