首页 / 短链 / 如何优化短链接性能?附解决方案

专业的短链接生成工具

链接域名

短网址有效期

如何优化短链接性能?附解决方案

更新时间:2025-5-2 21:17:14 作者:爱短链

现在到处都可以看到短网址。许多短消息将包含短 URL。点击短网址链接可以直接跳转到对应的长链接地址。其背后的原理其实很简单。服务器将存储短链接和长链接。对应关系,当收到短链请求时,程序会去程序中找到对应的长链,然后返回给浏览器,让浏览器重定向到长链地址,这就是整个过程


要知道如何优化短链接性能,首先要了解:短链是如何产生的?

短链接地址一般为域名+随机字符串,如下所示

如何从原始长链接生成短链接?哈希算法正好可以解决这个问题


Hash算法的特点是可以将任意长度的地址串转换为固定长度的哈希值。比如MD5,SHA的内部算法就是Hash算法,


这两种算法的逆破解难度很大,对应的内部也涉及到大量的计算。用于短网址,不考虑被破解的可能性


所以主要关注的是算法的效率和冲突的概率。


MurmurHash 是一种 Hash 算法,以效率高、冲突概率低而著称。 Redis、Google 的 guava 和 apache 的 commons-codec 都有这个算法的内部实现


这里我们选择MurmurHash中32bits的生成方式去生成短链接,我复制了谷歌的实现代码

public class HashUtil {
    private static final int c1 = 0xcc9e2d51;
    private static final int c2 = 0x1b873593;
    private static final int r1 = 15;
    private static final int r2 = 13;
    private static final int m = 5;
    private static final int n = 0xe6546b64;
    private static final int DEFAULT_SEED = 0;
    private static int hash32(byte[] key, int seed) {
        int hash = seed;
        final int len = key.length;
        int i = 0;
        int k = 0;
        for (; i + 4 <= len; i += 4) {
            k = ((key[i + 3] & 0xff) << 24)
                    | ((key[i + 2] & 0xff) << 16)
                    | ((key[i + 1] & 0xff) << 8)
                    | (key[i] & 0xff);
            k *= c1;
            k = Integer.rotateLeft(k, r1);
            k *= c2;
            hash ^= k;
            hash = Integer.rotateLeft(hash, r2);
            hash = hash * m + n;
        }
        int k1 = 0;
        switch (len - i) {
            case 3:
                k1 = (key[i + 2] & 0xff) << 16;
            case 2:
                k1 |= (key[i + 1] & 0xff) << 8;
            case 1:
                k1 |= key[i] & 0xff;
                k1 *= c1;
                k1 = Integer.rotateLeft(k1, r1);
                k1 *= c2;
                hash ^= k1;
        }
        hash ^= len;
        hash ^= hash >>> 16;
        hash *= 0x85ebca6b;
        hash ^= hash >>> 13;
        hash *= 0xc2b2ae35;
        hash ^= hash >>> 16;
        return hash;
    }
    public static int hash32(String str) {
        return hash32(str.getBytes(), DEFAULT_SEED);
    }
}

我们使用这个算法对这个 URL 进行哈希处理并得到结果:-1251719704


这是一串十进制整数值。如何将其转换为字符串?我们可以将其转换为十六进制。常用的62位合法字符有0~9、a~z、A到Z等62个字符。


转换算法我也会贴出来

private static String to62HEX(int num) {
        num = Math.abs(num);
        String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder sb = new StringBuilder();
        int remainder;while (num > 62 - 1) {
            remainder = Long.valueOf(num % 62).intValue();
            sb.append(chars.charAt(remainder));
            num = num / 62;
        }
        sb.append(chars.charAt(Long.valueOf(num).intValue()));
        return sb.reverse().toString();
    }

通过上面的算法,-1251719704可以转化为:1mI5tu


通用解决方案(如何优化短链接性能):


高性能短链接(短网址)算法,计算出来的字符串和域名可以拼接起来


这样我们就成功得到了一个短链URL,只需保存短链和长链的映射关系


6位十六进制数可以表示568亿个数字,足够了



如果有Hash冲突怎么办?


一般情况下,为了防止相同的短链出现在数据库中,我们会以新生成的短链作为查询条件来查询数据库,看是否存在相同的短链


如果有,别着急,看看我们处理的长链的地址与这条短链对应的长链是否相同。如果相同表示传入的长链是重复的,那么我们可以直接直接取这个短链。使用,无需再次储存。


如果不一样,说明有冲突。这时候我们可以在长链中加入一串特殊字符,然后进行哈希运算。如果这次没有冲突,我们可以用这个特殊字符拼接长链。与短链一起存储在数据库中


下次收到短链请求后,截断特殊字符再重定向


确定哈希冲突优化


以上方法判断是否发生哈希冲突,效率不是很高。您必须每次都查询数据库。事实上,哈希冲突的概率很低。当没有冲突时,就会有性能损失。如何优化它


我们可以为表中的短链列添加唯一索引。在程序中计算好短链后,我们就不需要查表直接保存了。如果成功,则说明不存在Hash冲突。是不是一样。然后重新计算——保存...


这样做的好处是,在没有哈希冲突的情况下,总的 SQL 语句执行次数会大大减少。只有发生哈希冲突时才需要重新操作,哈希冲突的概率很小。


还可以使用bloom filter优化sql条数。首先,构建一个存储短链的布隆过滤器。每次生成短链时,使用布隆过滤器判断是否重复。这种方法还可以减少sql查询次数


总结

我总结一下如何优化短链接性能,这个算法的核心思想


通过高效的哈希算法生成哈希值,将哈希值转换为十六进制,然后得到一个短网址后缀。

hash冲突的解决方法是给URL加一个固定的后缀,进行hash操作,直到不重复为止。


我粗略测试了一下,生成100万条短链只需要200毫秒,效率还是很高的。测试代码如下

public class ShortUrlTest {
    public static void test(){
        int size = 1000000;
        String[] urls = new String[size];
        for (int i = 0; i < size; i++) {
            urls[i] = "https://time.geekbang.org/column/article/80850" + UUID.randomUUID().toString();
        }
        System.out.println("数据填充完成");
        long l = System.currentTimeMillis();
        for (String s : urls) {
            String shortUrl = ShortUrlGenerate.generate(s);
        }
        System.out.println(System.currentTimeMillis() - l);
    }
    public static void main(String[] args) {
        test();
    }
public class ShortUrlGenerate {
    public static String generate(String originalUrl) {
        return to62HEX(HashUtil.hash32(originalUrl));
    }
    /**
     * 10进制转26进制
     *
     * @param num
     * @return
     */
    private static String to62HEX(int num) {
        num = Math.abs(num);
        String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        StringBuilder sb = new StringBuilder();
        int remainder;
        while (num > 62 - 1) {
            remainder = Long.valueOf(num % 62).intValue();
            sb.append(chars.charAt(remainder));
            num = num / 62;
        }
        sb.append(chars.charAt(Long.valueOf(num).intValue()));
        return sb.reverse().toString();
    }

以上就是关于《如何优化短链接性能?附解决方案》的全部内容了,感兴趣的话可以点击右侧直接使用哦!》》在线短链接生成

爱短链平台各工具使用方法及功能汇总

短链接

活码系统

微信外链

抖音卡片

相关搜索

创建短链接

注册与登录 首先,访问爱短链的官方网站,点击右上角的“注册”按钮,填写相关信息完成注册。注册成功后,使用账号和密码登录到平台后台。登录过程简单快捷,支持微信扫码和手机验证码等多种方式。 获取长链接 在准备创建短链接之前,你需要先获取想要缩短的长链接。例如,在微信公众号后台,打开需要生成短链接的文章,将该文章的长链接复制到剪贴板中。 生成短链接 登录爱短链平台后,你会看到后台界面提供了多种功能选项。点击“短链”功能,将刚刚复制的长链接粘贴到指定的输入框中。爱短链还允许用户绑定自己的域名,使短链接更具个性化和辨识度。设置完成后,点击“生成短链接”按钮,平台会立即为你生成对应的短链接。 使用短链接 短链接生成后,你可以将其复制并粘贴到公众号推文中需要添加链接的位置,如正文内容、阅读原文链接、公众号菜单栏等。在正文中插入短链接时,可以搭配一些吸引人的引导语,如“点击下方链接查看更多精彩内容”或“详情请戳[短链接]”等,以提高用户的点击率。

爱短链

2025-02-20 14:33:23

抖音链接跳转微信

抖音链接跳转微信不仅为品牌营销和个人推广提供了更多可能性,也为用户带来了更加便捷、高效的信息获取和互动体验。在未来,随着社交电商的蓬勃发展和用户需求的不断变化,抖音链接跳转微信将成为越来越多用户的首选引流方式,助力品牌营销和个人推广迈向新的高度。

爱短链

2025-01-15 16:13:31

活码二维码生成器在线

活码二维码生成器在线工具如爱短链等,操作简单,无需复杂的技术知识。用户只需在网页上打开相应的生成器平台,按照提示进行操作即可。通常,用户需要输入想要关联的信息,如网址、文本、图片、文件等,然后选择一些个性化设置,即可快速生成一个活码二维码。

爱短链

2025-01-15 16:13:31

生成短链接的工具

长链接的繁琐与不便愈发凸显,而一款优秀的短链接生成工具则成为了信息高效传播的关键。爱短链,正是这样一款脱颖而出的卓越工具,为你带来前所未有的链接管理体验。

爱短链

2025-01-15 16:13:31

跳转卡片在线生成

爱短链平台提供高效的跳转卡片在线生成功能,用户可轻松定制卡片模板,填入链接与信息,即刻生成吸引眼球的跳转卡片,适用于社交媒体、营销活动等场景,助力提升点击率与营销效果,实现精准引流。

爱短链

2025-01-15 16:13:31

最通俗易懂的短链接原理讲解

看了看,想要了解短链接算法的伙伴还是蛮多的,那么今天爱短链小编就帮大家带来详细的介绍。

爱短链

2022-05-30 15:20:34

微信活码的功能特点介绍

微信活码是营销推广行业必备的一个神器,它不但可以帮助我们更好的裂变,还能降低用户流失率。

爱短链

2022-05-19 12:37:01

营销推广必备的5个效率小工具

营销推广不仅要靠扎实的专业知识,在工具使用方面也是非常重要,没有好的工具就算自己有多么厉害的技能也会事倍功半。

爱短链

2022-05-18 14:08:22

用户喜欢

缩短链接:链接在线一键秒缩短

缩短链接是一种将长网址转换为短网址的服务,通常用于社交媒体、短信、电子邮件等场合,以便更简洁地分享链接。以下是一些在线一键缩短链接的方法和工具:

爱短链

2025-02-19 10:16:16

网址简化:1秒简化网址

网址简化,也称为URL缩短,是指将冗长的网址转换为简短、易记的链接。以下是几种快速简化网址的方法:

爱短链

2025-02-19 10:16:16

网站链接太长怎么缩短

当遇到网站链接太长需要缩短的情况时,可以采取以下几种方法:

爱短链

2025-02-18 16:04:47

h5页面跳转微信小程序

H5页面跳转微信小程序的需求普遍存在,因为微信小程序只能在微信内部访问,而H5页面可以在任何浏览器中访问,因此需要通过跳转来实现两者之间的衔接。以下是H5页面跳转微信小程序的主要方式:

爱短链

2025-02-18 16:04:46

链接缩短,教程分享,一招把链接缩短

链接缩短是一个方便用户分享和访问长链接的有效方法。以下是一招把链接缩短的详细教程:

爱短链

2025-02-18 14:15:53

微信卡片链接生成

微信卡片链接是指在微信中分享的一个特定格式的链接,通过该链接可以展示网页或内容的相关信息,并以卡片的形式呈现给接收者。以下是生成微信卡片链接的详细步骤:

爱短链

2025-02-18 09:57:08

微信活码免费在线制作

微信活码是一种可以智能切换的二维码,通常用于解决微信群扫码人数限制、微信号无限加好友、多渠道引流等问题。以下是一些免费在线制作微信活码的方法和步骤:

爱短链

2025-02-18 09:57:08

微信群活码,免费生成,永久生效

微信群二维码本身具有7天的有效期,微信官方并未提供直接生成永久有效微信群二维码的功能。但可以通过一些第三方工具实现类似永久有效的效果,以下是几种免费生成微信群活码并尽量保持其长期有效的方法:

爱短链

2025-02-18 09:57:08

全平台跨域跳转微信工具,助力企业全渠道获客

爱发布客服-依依

公网安备32010402001342号

苏ICP备2021048188号-3

© 爱短链 2019 | 南京推吧网络科技有限公司版权所有

客服