專業(yè)的短鏈接生成工具
鏈接域名
短網(wǎng)址有效期
短鏈接生成算法介紹
更新時(shí)間:2025-4-5 11:41:02 作者:愛(ài)短鏈
現(xiàn)在很多應(yīng)用都提供短鏈接的形式,短鏈接較長(zhǎng)鏈接比較,有閱讀起來(lái)友好、容易復(fù)制優(yōu)勢(shì)。
短鏈接服務(wù)核心部分包括:
(1) 長(zhǎng)鏈接轉(zhuǎn)短鏈接的算法
(2) 對(duì)應(yīng)關(guān)系持久化,方便長(zhǎng)鏈接和短鏈接互相查詢
短鏈接重定性流程
http://blog.csdn.net/poem_qianmo/article/details/52344732轉(zhuǎn)成短鏈接為:http://t.cn/RtFFvic
用戶通過(guò)短鏈接訪問(wèn)長(zhǎng)鏈接過(guò)程如下:
- 用戶訪問(wèn)短鏈接:http://t.cn/RtFFvic
- 短鏈接服務(wù)器http://t.cn收到請(qǐng)求,根據(jù)URL路徑RtFFvic獲取到原始的長(zhǎng)鏈接:http://blog.csdn.net/poem_qianmo/article/details/52344732
- 服務(wù)器返回302狀態(tài)碼,將響應(yīng)頭中的Location設(shè)置為:http://blog.csdn.net/poem_qianmo/article/details/52344732
- 瀏覽器重新向http://blog.csdn.net/poem_qianmo/article/details/52344732發(fā)送請(qǐng)求
- 返回響應(yīng)
長(zhǎng)鏈接轉(zhuǎn)短鏈接算法
長(zhǎng)鏈接轉(zhuǎn)短鏈接的算法根據(jù)實(shí)際需要可以選擇支持如下特性:
(1) 高可用,服務(wù)可以部署到多臺(tái)服務(wù)器上不會(huì)出現(xiàn)單點(diǎn)故障問(wèn)題。
(2) 長(zhǎng)鏈接和短鏈接1:1映射。一方面可以解決存儲(chǔ)資源,另外也可以方便點(diǎn)擊統(tǒng)計(jì)等功能實(shí)現(xiàn)。
(3) 少碰撞。生成短鏈接性能不會(huì)隨著已生成短鏈接數(shù)量增加而線性增加。
比較常用的算法有: 1. 隨機(jī)算法 & hash算法(MD5) 2. 發(fā)號(hào)器 & 進(jìn)制轉(zhuǎn)化 3. 預(yù)生成 & 訪問(wèn)分配
隨機(jī)算法
隨機(jī)算法原理是根據(jù)長(zhǎng)鏈接隨機(jī)生成字符串,然后將字符串映射到[0-9][a-z][A-Z]集合上。
為了減少隨機(jī)造成的沖突,很多公司會(huì)使用微博的短鏈接生成算法的變種。
算法一
1)將長(zhǎng)網(wǎng)址md5生成32位簽名串,分為4段,每段8個(gè)字節(jié); 2)對(duì)這四段循環(huán)處理, 取8個(gè)字節(jié), 將他看成16進(jìn)制串與0x3fffffff(30位1)與操作, 即超過(guò)30位的忽略處理; 3)這30位分成6段, 每5位的數(shù)字作為字表的索引取得特定字符, 依次進(jìn)行獲得6位字符串; 4)總的md5串可以獲得4個(gè)6位串; 取里面的任意一個(gè)就可作為這個(gè)長(zhǎng)url的短url地址;
這種算法,雖然會(huì)生成4個(gè),但是仍然存在重復(fù)幾率,下面的算法一和三,就是這種的實(shí)現(xiàn).
算法二
62個(gè)可選元素在隨機(jī)選兩個(gè)組成長(zhǎng)度為64的字符數(shù)組。 1. 隨機(jī)生成36位 0/1的隨機(jī)數(shù) 2. 36位分成6份,通過(guò)randomValue>>6以此獲取低6位元素。 3. (randomValue>>6) & 0x3F 獲取對(duì)應(yīng)的字符
算法二沖突的概率為1/64^6=1/2^36。
發(fā)號(hào)器 & 進(jìn)制轉(zhuǎn)化
算法三
- 首先請(qǐng)求發(fā)號(hào)器生成不重復(fù)十進(jìn)制數(shù)字
- 十進(jìn)制數(shù)字轉(zhuǎn)化成62進(jìn)制
該算法能夠支持62^6=500多億條長(zhǎng)鏈接。
發(fā)號(hào)器可以選擇數(shù)據(jù)庫(kù)自增ID,snake算法,redis等諸多實(shí)現(xiàn)。
預(yù)生成 & 訪問(wèn)分配
算法四
a-zA-Z0-9 這62位取6位組合,可產(chǎn)生500多億個(gè)組合數(shù)量.把數(shù)字和字符組合做一定的映射,就可以產(chǎn)生唯一的字符串,如第62個(gè)組合就是aaaaa9,第63個(gè)組合就是aaaaba,再利用洗牌算法,把原字符串打亂后保存,那么對(duì)應(yīng)位置的組合字符串就會(huì)是無(wú)序的組合。 把長(zhǎng)網(wǎng)址存入數(shù)據(jù)庫(kù),取返回的id,找出對(duì)應(yīng)的字符串,例如返回ID為1,那么對(duì)應(yīng)上面的字符串組合就是bbb,同理 ID為2時(shí),字符串組合為bba,依次類推,直至到達(dá)64種組合后才會(huì)出現(xiàn)重復(fù)的可能,所以如果用上面的62個(gè)字符,任意取6個(gè)字符組合成字符串的話,你的數(shù)據(jù)存量達(dá)到500多億后才會(huì)出現(xiàn)重復(fù)的可能。
301還是302?
301永久跳轉(zhuǎn) 302臨時(shí)跳轉(zhuǎn)
兩者區(qū)別主要體現(xiàn)在2個(gè)方面: (1) SEO優(yōu)化
(2) 瀏覽器緩存
搜索引擎遇到301跳轉(zhuǎn)時(shí)認(rèn)為是永久跳轉(zhuǎn), 搜索引擎只會(huì)將新鏈接加到索引里。 當(dāng)遇到302跳轉(zhuǎn)時(shí), 搜索引擎會(huì)同時(shí)索引老鏈接和新鏈接。
瀏覽器遇到301跳轉(zhuǎn)時(shí),會(huì)使用瀏覽器緩存,下次訪問(wèn)老鏈接時(shí)會(huì)直接訪問(wèn)新鏈接。當(dāng)遇到302跳轉(zhuǎn)時(shí), 瀏覽器會(huì)認(rèn)為臨時(shí)跳轉(zhuǎn),新老鏈接都會(huì)被訪問(wèn)到。
因此, 為了統(tǒng)計(jì)到短鏈接訪問(wèn)次數(shù), 一般使用302狀態(tài)碼進(jìn)行跳轉(zhuǎn)。
愛(ài)短鏈平臺(tái)各工具使用方法及功能匯總 | |
短鏈接 | 活碼 |
微信外鏈 | 抖音卡片 |