專業(yè)的短鏈接生成工具
鏈接域名
短網(wǎng)址有效期
長(zhǎng)鏈接轉(zhuǎn)短連接的方法及技術(shù)原理
更新時(shí)間:2025-4-20 13:02:04 作者:愛短鏈
什么是短鏈接?
顧名思義,它將長(zhǎng)鏈接轉(zhuǎn)短鏈接。為了輕松應(yīng)對(duì)某些場(chǎng)景下的字?jǐn)?shù)限制,除了支持將長(zhǎng)鏈接轉(zhuǎn)短鏈接外,還可以將已經(jīng)生成的短鏈接還原為長(zhǎng)鏈接。
使用方法:
1.點(diǎn)擊進(jìn)入愛短鏈短鏈接生成器(https://www.ifabu.com),在頂部輸入框中輸入要轉(zhuǎn)換的鏈接,然后點(diǎn)擊輸入框后面的“生成”按鈕即可長(zhǎng)鏈接轉(zhuǎn)短連接,轉(zhuǎn)化后可以一鍵復(fù)制轉(zhuǎn)化鏈接
2.點(diǎn)擊右下角的“≡”,然后在彈出的菜單欄中點(diǎn)擊“統(tǒng)計(jì)”跳轉(zhuǎn)到統(tǒng)計(jì)頁面,在上面的輸入框中粘貼你的短網(wǎng)址后綴,你可以查看網(wǎng)站點(diǎn)擊總數(shù)統(tǒng)計(jì)
一、為什么要設(shè)計(jì)短鏈接?
1、在內(nèi)容長(zhǎng)度有限的平臺(tái)上發(fā)布時(shí),鏈接變短,可編輯文本增加。
例如:微博限制為140字。如果直接發(fā)布一個(gè)長(zhǎng)鏈,那么剩下的其他可編輯內(nèi)容就很少了。如果使用短鏈,鏈接的長(zhǎng)度會(huì)大大縮短,自然可以編輯的文字會(huì)更多。很多。
2、我們經(jīng)常需要將鏈接轉(zhuǎn)換成二維碼分享給他人。如果是長(zhǎng)鏈,二維碼密集,難以識(shí)別,但短鏈則沒有這個(gè)問題。
3、鏈接太長(zhǎng),在某些平臺(tái)上無法自動(dòng)識(shí)別為超鏈接。
二. 為什么這里所有的網(wǎng)址都很短?有什么好處?
長(zhǎng)鏈接轉(zhuǎn)短連接的好處:
1.Short:短信和很多平臺(tái)(比如微博)都有字?jǐn)?shù)限制,所以文字不能加長(zhǎng)鏈接。
2.好看:與很多未知參數(shù)相比,短鏈接更加簡(jiǎn)潔友好。
3.方便做一些統(tǒng)計(jì):點(diǎn)擊鏈接會(huì)有人記錄分析。
4.安全性:不要公開訪問參數(shù)
三、長(zhǎng)鏈接轉(zhuǎn)短連接的實(shí)現(xiàn)原理:
首先我們看一下當(dāng)當(dāng)?shù)亩替溄觝ttp://localhost:8060/1J0vEa
它由兩部分組成
http://localhost:8060 域短鏈接系統(tǒng)名稱地址或IP+端口
1J0vEa:請(qǐng)求參數(shù)
請(qǐng)求http://localhost:8060/1J0vEa地址后,返回狀態(tài)如下
四、長(zhǎng)鏈接轉(zhuǎn)短連接的實(shí)現(xiàn)的方法
1、MurmurHash 非加密散列函數(shù) 將鏈接轉(zhuǎn)換為一串?dāng)?shù)字。
public static String hashToBase62(String str) {
int i = MurmurHash.hash32(str);
long num = i < 0 ? Integer.MAX_VALUE - (long) i : i;
return convertDecToBase62(num);
}
2、由于我們的短鏈接是由a-z、A-Z和0-9組成的,總共可以選擇 62 個(gè)字符。因此,我們可以將hashToBase62方法轉(zhuǎn)換的十進(jìn)制數(shù)從長(zhǎng)鏈接轉(zhuǎn)換為62位數(shù)字,例如:http://www.cnblogs.com/rjzheng/p/11827426.html變成1J0vEa
private static char[] CHARS = new char[]{
'0', '1', '2', '3', '4', '5', ' 6'、'7'、'8'、'9'、
'A'、'B'、'C'、'D'、'E'、'F'、'G'、'H' 、'I'、'J'、'K'、'L'、'M'、'N'、'O'、'P'、'Q'、'R'、'S'、'T'、' U'、'V'、'W'、'X'、'Y'、'Z'、
'a'、'b'、'c'、'd'、'e'、' f','g','h','i','j','k','l','m','n','o','p','q','r' , 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
private static int SIZE = CHARS.length ;
private static String convertDecToBase62(long num) {
StringBuilder sb = new StringBuilder();
while (num > 0) {
int i = (int) (num % SIZE);
sb.append(CHARS[i]);
num /= SIZE;
}
return sb.reverse().toString ();
}
3、短鏈接生成方法。
@Override
public String saveUrlMap(String shortURL, String longURL, String originalURL) {
//保留長(zhǎng)度為1的短鏈接
if (shortURL.length() == 1) {
longURL += DUPLICATE;
shortURL = saveUrlMap(HashUtils.hashToBase62(longURL), longURL, originalURL);
}
//尋找布隆過濾器中是否存在
else if (FILTER.contains(shortURL)) {
//存在,從Redis中查找是否有緩存
String redisLongURL = redisTemplate.opsForValue().get(shortURL);
if (redisLongURL != null && originalURL.equals( redisLongURL)) {
//Redis有緩存,重置過期時(shí)間
redisTemplate.expire(shortURL, TIMEOUT, TimeUnit.MINUTES);
return shortURL;
}
//不緩存,在長(zhǎng)鏈接后面加上指定字符串,重新hash
longURL += DUPLICATE;
shortURL = saveUrlMap(HashUtils.hashToBase62(longURL), longURL, originalURL);
} else {
//不存在,直接存入數(shù)據(jù)庫
try {
urlMapper.saveUrlMap(new UrlMap(shortURL, originalURL));
FILTER.add (短網(wǎng)址);
//廣告d cache
redisTemplate.opsForValue().set(shortURL, originalURL, TIMEOUT, TimeUnit.MINUTES);
} catch (Exception e) {
if (e instanceof DuplicateKeyException) {
//這個(gè)短鏈接已經(jīng)存在于數(shù)據(jù)庫中,可能是布隆過濾器誤判,在長(zhǎng)鏈接后面加上指定字符串,重新hash
longURL += DUPLICATE;
shortURL = saveUrlMap(HashUtils.hashToBase62(longURL), longURL, originalURL);
} else {
throw e;
}
}
}
return shortURL;
}
以上就是《長(zhǎng)鏈接轉(zhuǎn)短連接的方法及技術(shù)原理》的全部?jī)?nèi)容啦,趕緊去試試吧~