专业的短链接生成工具
链接域名
短网址有效期
长链接转短连接的方法及技术原理
更新时间:2025-5-3 12:09:40 作者:爱短链
什么是短链接?
顾名思义,它将长链接转短链接。为了轻松应对某些场景下的字数限制,除了支持将长链接转短链接外,还可以将已经生成的短链接还原为长链接。
使用方法:
1.点击进入爱短链短链接生成器(https://www.ifabu.com),在顶部输入框中输入要转换的链接,然后点击输入框后面的“生成”按钮即可长链接转短连接,转化后可以一键复制转化链接
2.点击右下角的“≡”,然后在弹出的菜单栏中点击“统计”跳转到统计页面,在上面的输入框中粘贴你的短网址后缀,你可以查看网站点击总数统计
一、为什么要设计短链接?
1、在内容长度有限的平台上发布时,链接变短,可编辑文本增加。
例如:微博限制为140字。如果直接发布一个长链,那么剩下的其他可编辑内容就很少了。如果使用短链,链接的长度会大大缩短,自然可以编辑的文字会更多。很多。
2、我们经常需要将链接转换成二维码分享给他人。如果是长链,二维码密集,难以识别,但短链则没有这个问题。
3、链接太长,在某些平台上无法自动识别为超链接。
二. 为什么这里所有的网址都很短?有什么好处?
长链接转短连接的好处:
1.Short:短信和很多平台(比如微博)都有字数限制,所以文字不能加长链接。
2.好看:与很多未知参数相比,短链接更加简洁友好。
3.方便做一些统计:点击链接会有人记录分析。
4.安全性:不要公开访问参数
三、长链接转短连接的实现原理:
首先我们看一下当当的短链接http://localhost:8060/1J0vEa
它由两部分组成
http://localhost:8060 域短链接系统名称地址或IP+端口
1J0vEa:请求参数
请求http://localhost:8060/1J0vEa地址后,返回状态如下
四、长链接转短连接的实现的方法
1、MurmurHash 非加密散列函数 将链接转换为一串数字。
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 个字符。因此,我们可以将hashToBase62方法转换的十进制数从长链接转换为62位数字,例如: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) {
//保留长度为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有缓存,重置过期时间
redisTemplate.expire(shortURL, TIMEOUT, TimeUnit.MINUTES);
return shortURL;
}
//不缓存,在长链接后面加上指定字符串,重新hash
longURL += DUPLICATE;
shortURL = saveUrlMap(HashUtils.hashToBase62(longURL), longURL, originalURL);
} else {
//不存在,直接存入数据库
try {
urlMapper.saveUrlMap(new UrlMap(shortURL, originalURL));
FILTER.add (短网址);
//广告d cache
redisTemplate.opsForValue().set(shortURL, originalURL, TIMEOUT, TimeUnit.MINUTES);
} catch (Exception e) {
if (e instanceof DuplicateKeyException) {
//这个短链接已经存在于数据库中,可能是布隆过滤器误判,在长链接后面加上指定字符串,重新hash
longURL += DUPLICATE;
shortURL = saveUrlMap(HashUtils.hashToBase62(longURL), longURL, originalURL);
} else {
throw e;
}
}
}
return shortURL;
}
以上就是《长链接转短连接的方法及技术原理》的全部内容啦,赶紧去试试吧~