短網址的生成演算法
Ⅰ 短鏈接服務搭建
關鍵詞:長鏈接;短鏈接;重定向;
長鏈接問題:
復制容易出錯,長鏈接URL較長,有時參數不止一個,復制容易遺漏或在粘貼時被編輯器截斷;
容易被屏蔽,絕大部分長鏈接暴露了資源來源及分配策略,在投放第三方時容易被屏蔽,比如被簡訊屏蔽,(淘寶寶貝長鏈接)被微信屏蔽......;
反例:
因此,我們考慮短鏈接服務對長鏈接進行壓縮,跳轉替代!
1、用戶訪問短鏈接: https://0x9.me/QvjlI ;
2、短鏈接伺服器0x9.me收到請求,根據路徑參數QvjlI獲取到原始鏈接:
http://www.dazhongkanche.com/gou/20200914/64294.html
3、伺服器返回301/302狀態碼,將響應頭中的Location設置為 原始鏈接;
4、瀏覽器重定向到原始鏈接;
5、返回響應;
短鏈接生成:
1、庫表設計:id、code(短鏈碼)、url(原鏈接),採用Key-Value方式對應存儲
2、短鏈碼
1)、存儲方式:62進制,每位 可選 a-z、A-Z 和 0-9 等62個字元,比通常的數字方式存儲量大。註:
4位就可以表徵 62^4 = 1477,6336 約 1500萬條數據;
5位可以表徵 62^5 = 9,16132832 約 9億條數據;
6位可以表徵 62^6 = 568,00235584 約 560億條數據;
例子:
通過短鏈碼的長度,可以判斷得出各平台服務板塊的歷史業務量,如上:
【菜鳥驛站】同【拼多多】,採用了8位短鏈碼,62^8 = 218,3401,05584896,業務量都累積到了多少萬億級別。
另,值得關注,點擊拼多多的鏈接直接打開APP(具體技術方案參考: 如何從推廣簡訊鏈接喚起 App ),優於絕大部分應用的推廣。
2)、生成方式:可以按ID自增序列(自增後10到62進制轉換)、哈希演算法方式生成,可參考: 如果教你設計一個 短 鏈接 系統,你會從那些方面來提高性能呢?
重定向性能考慮:
1、301、302跳轉區別:
1)、301跳轉,永久重定向,默認被瀏覽器緩存,只要訪問過一次短鏈,後續都會直接跳轉原鏈地址,不經過伺服器;
2)、302跳轉,臨時重定向,不被瀏覽器緩存,每次都經過短鏈接伺服器;
所以,要想實現短鏈更靈活的資源跳轉配置,採用302跳轉就比較合適,缺點是:對搜索引擎不友好+性能問題(每次都要過短鏈服務);考慮到SEO+訪問性能(瀏覽器緩存解決),建議採用301跳轉方式。
2、通過Redis做查詢表,短鏈Code 映射長鏈接Url;
3、防機器人腳本訪問,結合白名單等機制;
註:作為對外開放的短鏈服務對設計要求更高,完全作為一個獨立系統進行設計。
註:本當章節下所有內容的撰寫思路與方式:
1、針對指定資源手動生成短鏈接,進行投放;
2、針對指定資源,批量生成短鏈接,並形成記錄,以便進行投放;
3、在一些環節(如:簡訊投放、微信分享時),自動生成短鏈接(用戶無感)完成投放;
介紹如何應用場景:
1、朋友圈消息:
2、微信/QQ群插件自動發送鏈接
微信,空間節約效果良好:
常用的QQ群自動回復插件:
3、簡訊營銷
優點:
1、在鏈接投放時,方便復制粘貼;
2、短網址使排版變的美觀,簡潔,用戶關注的重點在文案上面;
3、防止屏蔽,如簡訊屏蔽、微信屏蔽....;
4、訪問資源有效期控制,添加密碼等:
原則上可以在跳轉之前做任何後端想做的事情,比如訪問統計,比如後續訪問鏈接的切換,所以對訪問資源的可控性就比較強,
舉例:跳轉資源不穩定,今天是A,明天是B,就可以通過修改原鏈接實現跳轉資源的切換。
關聯技術的延展介紹
1、301對重定向的影響: https://www.batmanit.com/p/457.html
2、有投放就必然涉及到投放資源、渠道、及效果的管理:
資源管理,比如說文章;
渠道管理,比如:微信渠道(公號、朋友圈、運營人員個人私聊)、QQ、微博、簡訊、頭條.....
投放效果統計,針對文章的效果統計(各文章的效果如何?),針對渠道的效果統計(各渠道的效果如何?),針對文章&渠道的效果統計(即不同文章在不同渠道的效果如何?)
3、 一切為了營收!如何從推廣簡訊鏈接喚起 App ?
4、 如果教你設計一個 短 鏈接 系統,你會從那些方面來提高性能呢?
Ⅱ 怎麼做一個短網址縮短網站,網址縮短後要以自己的頂級域名顯示的,不是顯示現在網上流行的url、t等。
現在網址縮短網站有很多了,就分析一下做得比較好的六度短網址6.in短網址生成服務平台:
(1)將長網址md5生成32位簽名串,分為4段,每段4個位元組
對這4段循環處理,取4個位元組(32位),將它看成16進制串與0x3fffffff(30位1)(2)與操作,即超過30位的忽略處理
(3)這30位分成6段,每5位的數字作為字母表的索引取得特定字元,依次進行獲得6位字元串
(4)總的md5串可以獲得4個6位串,取裡面的任意一個就可作為這個長url地址
(5)把數字和字元組合做一定的映射,就可以產生唯一的字元串,如第62個組合就是sssss9,第63個組合就是ssssba,再利用洗牌的演算法,把原字元打亂後保存,那麼對應位置的組合字元串就會是無序的組合。
(6)把長網址存入資料庫,取返回的id,找出對應的字元串,例如返回id為1,那麼對應上面的字元串組合就是aaa,同理id為2時,字元串組合為aaa,依次類推,直至到達62種組合後才會出現重復的可能,所以如果用上面的62個字元,任意取6個字元組合成字元串的話,你的數據存量達到500多億後才會出現重復的可能。
Ⅲ 微博上是如何把一個長URL變成一個短小的URL的這是一種加密方式嗎
那是新浪針對新浪微博推出的一種功能。不用用戶自己轉換,這個步驟由新浪來代勞。
他不是加密方式,簡單的說就是換了一種表現形式
為什麼要這樣做的,原因我想有這
樣幾點:
1、微博限制字數為140字一條,那
么如果我們需要發一些連接上去,
但是這個連接非常的長,以至於將
近要佔用我們內容的一半篇幅,這
肯定是不能被允許的,所以短網址
應運而生了。
2、短網址可以在我們項目里可以
很好的對開放級URL進行管理。有
一部分網址可以會涵蓋XX,暴力,
廣告等信息,這樣我們可以通過用
戶的舉報,完全管理這個連接將不
出現在我們的應用中,應為同樣的
URL通過加密演算法之後,得到的地
址是一樣的。
3、我們可以對一系列的網址進行
流量,點擊等統計,挖掘出大多數
用戶的關注點,這樣有利於我們對
項目的後續工作更好的作出決策。
其實以上三點純屬個人觀點,因為
在我接下來的部分項目中會應用
到,所以就了解了一下,下面先來
看看短網址映射演算法的理論(網上
找到的資料)
1)將長網址md5生成32位簽名串,分
為4段, 每段8個位元組;
2)對這四段循環處理, 取8個位元組, 將
他看成16進制串與0x3fffffff(30位1)
與操作, 即超過30位的忽略處理;
3)這30位分成6段, 每5位的數字作
為字母表的索引取得特定字元, 依
次進行獲得6位字元串;
4)總的md5串可以獲得4個6位串; 取
裡面的任意一個就可作為這個長url
的短url地址;
很簡單的理論,我們並不一定說得
到的URL是唯一的,但是我們能夠
取出4組URL,這樣幾乎不會出現太
大的重復。