扫描二维码 上传二维码
选择防红平台类型,避免链接被拦截
选择允许访问的平台类型

如何高效地创建URL短链接?

在浏览业务代码时,我注意到其中的一些逻辑采用了短链接服务,这确实很有趣。每个人都会收到这样的营销广告。有些广告受到最大字符数的限制,为了提供更好的用户体验,广告中的链接通常都很短。那么,这些短链接是如何生成的呢?

一、URL短链接的原理
例如,快缩短网址平台提供了短链接服务。以下是请求短链接时的HTTP信息:

二、短链接生成算法
短链接标识通常是0-9和a-z、A-Z的组合,共有62个字符。因此,短链接标识可以用16进制字符串表示。

首先,我们需要维护一个自动递增的ID。生成短链接时,我们将十进制自增ID转换为62位的十六进制字符串,这样可以唯一地标识长链接。由于ID是自增的,对应的62位字符串也是不同的,因此不会出现一个短链接对应多个长链接的情况。62个字符的排列组合可以确保短链接源源不断。即使是仅限于6位长度的标识,也超过了558亿种可能。这种算法在网络中被称为自增序列算法。

维护自增ID的方式有以下几种:

以下是十六进制的编码和解码方法,来自Base62。



private static String base62(long b10) {
StringBuilder ret = new StringBuilder();
while (b10 > 0) {
ret.insert(0, characters.charAt((int) (b10 % 62)));
b10 /= 62;
}
return ret.toString();
}

private static long decodeBase62(String b62) {
long ret = 0;
b62 = new StringBuffer(b62).reverse().toString();
long count = 1;
for (char character : b62.toCharArray()) {
ret += characters.indexOf(character) * count;
count *= 62;
}
return ret;
}




三、一些细节
1. 自增序列算法也存在一定的局限性。当自增主键较大时,生成的十六进制字符串会变长。例如,当主键大于56800235583时,生成的7位长度为62的字符串。这个问题可以通过控制自增主键的增长速度来解决。
2. 十六进制的顺序不一定严格按照0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ的顺序,这个顺序可以打乱,这样生成的短链接会更加随意,不易被破解。
3. 长链接和短链接之间是一对一的关系。同一个长链接的自增主键ID算法生成的短链接是不同的,因为自增主键ID不同,生成的62位字符串自然也不同。如果我们有一个长链接只对应一个短链接的需求,我们可以用MD5加密长链接,将加密后的MD5值存储在数据库中,然后根据长链接的MD5值查询数据库,再生成短链接并关联起来。当然,也可以使用其他方法来维护这种关系。
4. 跳转使用301或302,301是永久重定向,302是临时重定向。短地址一旦生成就不会改变,所以使用301符合HTTP语义。同时,服务器的压力也在一定程度上得到了缓解。
但是,如果使用301,我们就无法统计短地址的点击次数。而这个点击量对于大数据分析来说是非常有趣的数据来源。可以分析的内容太多了。所以选择302会增加服务器压力,但我觉得这是更好的选择。
5. 如果短链接请求频繁,可以使用Redis进行相应的缓存优化。

以上是关于《URL短链接的生成原理及算法》的全部内容。如果您对此感兴趣,可以直接点击右侧使用哦!

在线短链接生成器



如果您对我们的项目感兴趣,欢迎访问我们的网站suo.run。在这里,您可以轻松地将长链接转换成短链接,提升您的用户体验。快来试试吧!