亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

短鏈接原理分析

SexySix / 1548人閱讀

摘要:舉個例子,第一個進來的鏈接發(fā)號器發(fā)號,對應(yīng)的短鏈接為,第二個進來的鏈接發(fā)號器發(fā)號,對應(yīng)的短鏈接為,以此類推。這樣一來會導(dǎo)致一條長鏈接對應(yīng)多條短鏈接的情況出現(xiàn),不僅浪費存儲空間,又浪費發(fā)號器資源。

1. 什么是短鏈接

顧名思義,短鏈接即是長度較短的網(wǎng)址。通過短鏈接技術(shù),我們可以將長度較長的鏈接壓縮成較短的鏈接。并通過跳轉(zhuǎn)的方式,將用戶請求由短鏈接重定向到長鏈接上去。短鏈接主要用在諸如微博,BBS等對帖子字?jǐn)?shù)有限制的網(wǎng)站,通過使用短鏈接,用戶可以把注意力放在帖子的內(nèi)容上,而不是在擔(dān)心鏈接超長的問題。這里以百度的 dwz.cn 短鏈接服務(wù)為例,我們使用百度搜索"hello world",鏈接為https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=hello%20world&rsv_pq=8487bffe00068c60&rsv_t=a9e0f5b6haiMQwAi4N2y8PHDv37rM6sjjKrHJb6KdMGg2dQuUjAnmSEnXtE&rqlang=cn&rsv_enter=1&rsv_sug3=10&rsv_sug1=9&rsv_sug7=100,統(tǒng)計了一下,這條鏈接長度為230。如此長的鏈接占據(jù)微博篇幅不說,也會影響微博的美觀度。這個時候我們可以使用百度短鏈接服務(wù)壓縮一下上面的長鏈接,壓縮后的鏈接為:http://dwz.cn/5DDXhH。可以看到,壓縮后的鏈接長度比原鏈接明顯變短了。

2. 常見的短鏈接壓縮算法

常見的短鏈接壓縮算法有兩種,第一種是對 URL 進行hash運算,在得到的hash值上做進一步運算,得到一個較短的hash值。第二種是通過數(shù)據(jù)庫自增ID或分布式key-value系統(tǒng)模擬發(fā)號器進行發(fā)號壓縮URL。兩種方式各有優(yōu)劣,hash運算簡單易實現(xiàn),但是有一定的沖突率。隨著 URL 壓縮數(shù)量的增加,沖突數(shù)也會增加,最終導(dǎo)致一部分用戶跳轉(zhuǎn)到錯誤的地址上,影響用戶體驗。而發(fā)號器發(fā)號壓縮 URL 優(yōu)缺點恰好和hash壓縮算法相反,優(yōu)點是不存在沖突問題。缺點是,實現(xiàn)上稍復(fù)雜,要協(xié)調(diào)發(fā)號器取初始號。本文對應(yīng)的練手項目是基于第二種壓縮算法實現(xiàn)的,下面也將對詳細分析第二種算法。

3. 使用發(fā)號策略壓縮URL

發(fā)號策略是這樣的,當(dāng)一個新的鏈接過來時,發(fā)號器發(fā)一個號與之對應(yīng)。往后只要有新鏈接過來,發(fā)號器不停發(fā)號就好。舉個例子,第一個進來的鏈接發(fā)號器發(fā)0號,對應(yīng)的短鏈接為 xx.xxx/0,第二個進來的鏈接發(fā)號器發(fā)1號,對應(yīng)的短鏈接為 xx.xxx/1,以此類推。
發(fā)號器發(fā)出的10進制號需要轉(zhuǎn)換成62進制,這樣可以大大縮短號碼轉(zhuǎn)換成字符串后的長度。比如發(fā)號器發(fā)出 10,000,000,000 這個號碼,如果不轉(zhuǎn)換成62進制,直接拼接在域名后面,得到這樣一個鏈接 xx.xxx/10000000000。將上面的號碼轉(zhuǎn)換成62進制,結(jié)果為AOYKUa,長度只有6位,拼接得到的鏈接為 xx.xxx/AOYKUa。可以看得出,進制轉(zhuǎn)換后得到的短鏈接長度變短了一些。6位62進制數(shù),對應(yīng)的號碼空間為626,約等于568億。也就是說發(fā)號器可以發(fā)568億個號,這個號碼空間應(yīng)該能夠滿足多數(shù)項目的需求了,所以基本上不用擔(dān)心發(fā)號器無號可發(fā)的情況。
上述是發(fā)號策略壓縮URL的原理,在實際寫代碼的過程中還需要考慮很多細節(jié),比如緩存,存儲等。本文對應(yīng)的項目基于 Redis 緩存,MySQL 數(shù)據(jù)庫實現(xiàn)了一個簡單的分布式短鏈接服務(wù)。代碼放到了 Github 上了 -> 分布式短鏈接項目代碼

4. 幾個細節(jié)問題 Q:同一長鏈接,每次轉(zhuǎn)成的短鏈接是否一樣

A:同一長鏈接,每次轉(zhuǎn)成的短鏈接不一定一樣,原因在于如果查詢緩存時,如果未命中,發(fā)號器會發(fā)新號給這個鏈接。需要說明的是,緩存應(yīng)該緩存經(jīng)常轉(zhuǎn)換的熱門鏈接,假設(shè)設(shè)定緩存過期時間為一小時,如果某個鏈接很活躍的話,緩存查詢命中后,緩存會刷新這個鏈接的存活時間,重新計時,這個鏈接就會長久存在緩存中。對于一些生僻鏈接,從存入緩存開始,在存活時間內(nèi)很可能不會被再次訪問,存活時間結(jié)束緩存會刪除記錄。下一次轉(zhuǎn)換這個生僻鏈接,緩存不命中,發(fā)號器會重新發(fā)號。這樣一來會導(dǎo)致一條長鏈接對應(yīng)多條短鏈接的情況出現(xiàn),不僅浪費存儲空間,又浪費發(fā)號器資源。那么是否有辦法解決這個問題呢?是不是可以考慮建立一個長鏈接-短鏈接的key-value表,將所有的長鏈接和對應(yīng)的短鏈接都存入其中,這樣一來就實現(xiàn)了長短鏈接一一對應(yīng)的了。但是想法是美好的,現(xiàn)實是不行的,原因在于,將所有的長鏈接-短鏈接對存入這樣的表中,本身就需要耗費大量的存儲空間,相對于生僻鏈接可能會對應(yīng)多條短鏈接浪費的那點空間,這樣做顯然就得不償失了。

Q:短鏈接使用301跳轉(zhuǎn)還是302跳轉(zhuǎn)

A:這里啰嗦一下301和302的跳轉(zhuǎn)在短鏈接服務(wù)使用場景下的區(qū)別:用戶第一次訪問某個短鏈接后,如果服務(wù)器返回301狀態(tài)碼,則這個用戶在后續(xù)多次訪問統(tǒng)一短鏈接,瀏覽器會直接請求跳轉(zhuǎn)地址,而不是短鏈接地址,這樣一來服務(wù)器端就無法收到用戶的請求。如果服務(wù)器返回302狀態(tài)碼,且告知瀏覽器不緩存短鏈接請求,那么用戶每次訪問短鏈接,都會先去短鏈接服務(wù)端取回長鏈接地址,然后在跳轉(zhuǎn)。從語義上來說,301跳轉(zhuǎn)更為合適,因為是永久跳轉(zhuǎn),不會每次都訪問服務(wù)端,還可以減小服務(wù)端壓力。但如果使用301跳轉(zhuǎn),服務(wù)端就無法精確搜集用戶的訪問行為了。相反302跳轉(zhuǎn)會導(dǎo)致服務(wù)端壓力增大,但服務(wù)端此時就可精確搜集用戶的訪問行為?;谟脩舻脑L問行為,可以做一些分析,得出一些有意思的結(jié)論。比如可以根據(jù)用戶IP地址得出用戶區(qū)域分布情況,根據(jù)User-Agent消息頭分析出用戶使用不同的操作系統(tǒng)以及瀏覽器比例等等。

參考

https://www.zhihu.com/question/29270034/answer/46446911
http://blog.csdn.net/xyz_lmn/article/details/8057270
http://blog.csdn.net/beiyeqingteng/article/details/7706010

本文在知識共享許可協(xié)議 4.0 下發(fā)布,轉(zhuǎn)載需在明顯位置處注明出處
作者:coolblog
同步發(fā)布地址:http://www.coolblog.xyz


本作品采用知識共享署名-非商業(yè)性使用-禁止演繹 4.0 國際許可協(xié)議進行許可。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/67614.html

相關(guān)文章

  • 網(wǎng)址原理和實現(xiàn)

    摘要:背景介紹相信很多人手機上都收到過一些營銷短信,短信里面有時候會附帶一些網(wǎng)址,如下圖這些網(wǎng)址往往都是非常短,但是當(dāng)我們打開之后,如果你仔細觀察,中間會有跳轉(zhuǎn),最終瀏覽器地址欄顯示的網(wǎng)址并不是你短信里面看到的網(wǎng)址,這就是短網(wǎng)址原理和應(yīng)用短網(wǎng)1.背景介紹 相信很多人手機上都收到過一些營銷短信,短信里面有時候會附帶一些網(wǎng)址,如下圖 showImg(https://user-gold-cdn.xitu...

    sihai 評論0 收藏0
  • 數(shù)據(jù)庫收集 - 收藏集 - 掘金

    摘要:前言在使用加載數(shù)據(jù)數(shù)據(jù)庫常見的優(yōu)化操作后端掘金一索引將放第一位,不用說,這種優(yōu)化方式我們一直都在悄悄使用,那便是主鍵索引。 Redis 內(nèi)存壓縮實戰(zhàn) - 后端 - 掘金在討論Redis內(nèi)存壓縮的時候,我們需要了解一下幾個Redis的相關(guān)知識。 壓縮列表 ziplist Redis的ziplist是用一段連續(xù)的內(nèi)存來存儲列表數(shù)據(jù)的一個數(shù)據(jù)結(jié)構(gòu),它的結(jié)構(gòu)示例如下圖 zlbytes: 記錄整...

    Little_XM 評論0 收藏0

發(fā)表評論

0條評論

SexySix

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<