首页 / 短链 / java 短链接技术原理,源码分享

专业的短链接生成工具

链接域名

短网址有效期

java 短链接技术原理,源码分享

更新时间:2025-5-5 00:52:15 作者:爱短链

下面介绍两种生成Java 短链接的方法,供有需要的朋友参考。


方法一
这种方法的缺点很明显。


1. 缺点
必须指定短链接的长度(for循环的个数就是短链接的长度)。设置完成后,如果代码已满,则需要更改代码才能重新发布。不利于维护


会发现这段代码只生成key,和自己要生成的链接没有关系,所以需要手动记录key之间的对应关系和价值。比如记录在redis中。(其实我不认为这是一个缺点。短链接要考虑的场景之一是过期。)


私有静态最终字符[] BASE_62_CHARS = "abcdefghzjklmnopqrstuvwxyzABCDEFGHZJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
私有静态最终 int BASE_62_CHARS_LENGTH = BASE_62_CHARS.length;
public static String method1(){
    StringBuffer sb = new StringBuffer();
    随机
    for = new Random() (int i = 0; i < 6; i++) {
        int index = random.nextInt(BASE_62_CHARS_LENGTH);
        sb.append(BASE_62_CHARS[索引]);
    }
    返回 sb.toString();
}
1
2
3
4
5
6
7
8
9
10
11


方法 2
这是在方法1的基础上改进的方法,主要修复缺陷1。


引入了一个增量变量startIndex,每次生成后增量变量累加1。使用 redis 存储 startIndex 是一个很好的解决方案。


这种方法也有缺点2。但是优点是startIndex设置后,代码不需要维护,短链接的长度会随着startIndex的增加而增加。


私有静态最终字符[] BASE_62_CHARS = "abcdefghzjklmnopqrstuvwxyzABCDEFGHZJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
私有静态最终 int BASE_62_CHARS_LENGTH = BASE_62_CHARS.length;
公共静态 void main(String[] args) {
    int startIndex= 10100;
    System.out.print startIndex));
}
public static String formBase10(long i){
    StringBuffer sb = new StringBuffer();
    if(i == 0){
        return "a";
    }
    while (i > 0){
        i = formBase10(i, sb);
    }
    return sb.toString();
}
public static long formBase10( long i, StringBuffer sb){
    int rem = (int)(i % BASE_62_CHARS_LENGTH);
    sb.append(BASE_62_CHARS[rem]);
    长 r = (i / BASE_62_CHARS_LENGTH);
    返回 r;
}


java 短链接


我在知乎上看到这个帖子说的是生成java 短链接的方法。主要有两个步骤:


实现一个不重复的中继器


每个新的请求都给它一个新的数字,并转换成十六进制,格式为阿拉伯数字和英文大小写,更适合作为短地址的url。


编号装置

不要直接造轮子,用推特的雪花算法。


0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000


1位标识,因为Java中long基本类型是有符号的,最高位为符号位,正数为0,负数为1,所以id一般为正数,最高位为0


41位时间截止(毫秒级) 一般来说,这个时间可以使用69年。


10个数据机位,可部署在1024个节点上


12位序列,毫秒内计数,12位计数序列号支持每个节点每毫秒生成4096个ID号(同一台机器,相同时间间隔)


它加起来正好是 64 位,这是一个 Long 类型。


基础转换

将上述发送器得到的Long类型的数据转换为16进制,如6628238651141500928


转换成7TDp0rS917i


以下字符串是所需的短地址。


重定向

通过curl -i http://127.0.0.1:9527/7TDhjcamrAI,应用会匹配到最后的字符串,去redis获取url,然后通过状态码 302 重置方向即可。


二维码生成

使用谷歌的zxing做二维码转换,详细代码可以看这里。


性能测试

使用 JMH 进行性能基准测试,环境为 CPU:2.2 GHz Intel Core i7;内存:16 GB;操作系统:Mac OSX。


选项 options = new OptionsBuilder().include(BenchmarkTest.class.getName()+".*") .warmupIterations(1) // warmup.warmupTime(TimeValue.seconds(1)) .measurementIterations ( 5)//一共10轮testing.measurementTime(TimeValue.seconds(5))//每轮testing的持续时间.forks(1)//创建几个进程来test.threads(16)//线程数.build();


java 短链接


测试结果如下:

Benchmark 模式 Cnt 得分错误单位 BenchmarkTest.httprequest thrpt 5 1948.349 ± 2028.032 ops/s BenchmarkTest.serviceRequest thrpt 5 3945.100 ± 1185.980 ops /s


httprequest 通过 okhttp 构造一个 post 请求,直接请求本地前端控制方法。qps大约是2000左右。


serviceRequest是直接调用本地方法service获取短地址,qps大约是http测试的两倍,4000左右,比较理想。


进一步优化空间,可以关注十六进制转换部分,有不必要的基本类型转换。


原则:

Ø 通过编号策略,为每个请求的长地址分配一个唯一的编号,小系统可以直接使用数据库的自增主键。


Ø 如果应用量大,可以考虑实现分布式信号发生器,它会自动不断增加。第一个使用该服务的人得到一个短地址


 http://www.shururl.com/0 第二个是 http://www.shururl.com/1 第十个是 http://www.shururl .com /a 后跟


实现处理流程:


A. 核心步骤:

实现一个唯一的发件人。


为每个请求获取一个唯一的数字,并将其转换为十六进制,它是英文字母(大小写)、阿拉伯数字等的组合,作为短地址的短代码。


B. 编号设备规则:

计算思路来源:推特雪花算法

0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000


1位标识,因为Java 短链接中long基本类型是有符号的,最高位为符号位,正数为0,负数为1,所以id一般为正数,最高位为0.

41 位时间截止(毫秒级) 这是毫秒级时间。实现中一般不存储当前时间戳,而是时间戳之间的差值(当前时间-固定开始时间),这样生成的ID就可以从Start改成更小的值;一个 41 位的时间戳可以使用 69 年,(1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69 年;


5个数据中心,可存在32个数据中心

5机位,每1个数据中心可部署32个节点

12位序列号,以毫秒为单位计数,12位计数序列号支持每个节点每毫秒生成4096个ID序列号(同一台机器,相同时间间隔)

它加起来正好是 64 位,这是一个 Long 类型。


C. 基础转换:

将上述数字生成器得到的Long类型数据转换为十六进制,例如:6628238651141500928转换为:7TDp0rS917i 以下字符串为需要的短地址,http://127.0. 0.1/7TDp0rS917i


java 短链接


详细思路: 

1. 根据发行者数量在mongo中创建表

2. 根据以上【实现处理流程-B】处理思路:

1个符号位+41位时间间隔+5位数据中心位+5位机器位+12位序列号=64位,Long类型。


3. 将2步计算得到的十进制数转换为62位十六进制,用数字10000给它的短地址对应的数字9999。我们将使用雪花算法得到的9999做一个10 位数字。从系统转换为基数 62。


4. 解决issuer的大并发和高可用的问题,就是让issuer分布式,所以很多节点需要保持同步,加1。根据CAP理论,多点同时写入确保一致性(Consistency)),实际上是不可能做到的。解决方案:可以实现多个发射器。根据以上原理,我们可以实现32个逻辑发送器,分别发送尾号从0到31的号码。每发出一个号码,在5位机号的基础上连续加1。这些号码发射机相互独立,互不干扰。


5. 使用 301 或 302 进行跳转。301是永久重定向,302是临时重定向。短地址一旦生成就不会改变,所以使用 301 符合 http 语义。同时,服务器的压力也会在一定程度上减轻。但是如果使用301,我们就无法统计短地址的点击次数。获取这些信息是数据分析的重要来源。302虽然会增加服务器压力,但它是最好的选择。


以上就是关于《java 短链接技术原理,源码分享》的全部内容了,感兴趣的话可以点击右侧直接使用哦!》》在线短链接生成

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

短链接

活码系统

微信外链

抖音卡片

相关搜索

创建短链接

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

爱短链

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 | 南京推吧网络科技有限公司版权所有

客服