微博、淘寶是怎麼把長網址壓縮成短網址的?背後的技術並不難

我們都用過這麼一個功能,一個非常長的網址,可以被壓縮稱一個非常短的鏈接,這背後用到的是什麼樣的技術呢?背後又隱藏著怎麼樣的算法與數據結構?我們如何能夠快速的進行實現。

短網址技術其實非常的簡單,我們可以將這個技術分成兩部分,第一部分是長網址的壓縮,也就是如何把長連接地址壓縮成短連接地址,第二部分是如何把訪問短鏈接地址的時候又重新變成訪問長鏈接地址。

哈希算法


微博、淘寶是怎麼把長網址壓縮成短網址的?背後的技術並不難


最常見的短網址實現方案便是使用哈希算法,相信學過算法與數據結構的同學對這個算法並不陌生,哈希算法可以把非常長的文本甚至文件映射成一個字符串或者數字,這種算法並不陌生,我們常見的文件md5算法也屬於哈希算法中的一種。

但是md5比較長,通常我們會使用murmurhash來進行哈希,這是一種比較輕量級的哈希算法。我們將哈希後的值跟長連接還有失效時間一起保存在數據庫裡面,後面通過哈希後的值,就能夠找到對應的原始長鏈接地址了。

但是,這裡還存在2個細節問題,首先是哈希地址衝突了怎麼辦?常見的哈希衝突解決方法,便是從後面一直找,找到一個空的插槽放進去,如果學過算法與數據結構,便知道這種算法比較不穩定,並且實現起來也麻煩。我們有一個更簡單的做法,就是在原始鏈接後面再拼上一個自定義的字符串進行哈希。

微博、淘寶是怎麼把長網址壓縮成短網址的?背後的技術並不難

另外一個問題,便是murmurhash的哈希結果是一個32位的數字,只有0到9組成,如果似乎幾千萬的一個數字,也比較長,那麼我們可以怎麼辦呢?我們可以把這個簡單十進制數字轉成更高的進制,把字母a到z與A到Z都用上,就可以把字符串壓到非常短了。

重定向

那麼如何訪問一個短地址的時候變成一個長地址呢?同理也是非常的簡單,運用到的便是網頁重定向功能。


微博、淘寶是怎麼把長網址壓縮成短網址的?背後的技術並不難


用戶先使用短地址到後臺查詢,後臺到數據庫中進行查詢後,便校驗數據的合法性,例如數據過期之類的,緊接著返回長地址與重定向錯誤碼,瀏覽器接受到錯誤地址後便開始重定向到真實地址。

總結

看,其實只要非常簡單的算法跟存儲,我們變成製作一個短地址服務器,如果你有興趣,可以關注我,後面我們會用簡單的代碼進行實現。歡迎大家關注我,共同學習,共同進步。大家的支持是我繼續嘮嗑的動力。同名公眾號(沙茶敏碎碎念)

"


分享到:


相關文章: