Bootstrap

基于 SpringBoot 开发的在线短链生成系统(附源码)

前言

分享一个基于 SpringBoot 开发的在线短链生成系统,在线短链接生成器。

完整项目源码在文章结尾处,大家自行下载即可~

一、实现功能

1、将长链接转换成短链接,访问短链接时, 302重定向至原始长链接

2、支持设置短链有效期

3、支持记录访问次数

二、界面展示

三、技术选型

依赖说明
SpringBoot基础框架
Thymeleaf模板引擎
JdbcTemplate持久层框架
Redis缓存
guavaHash算法、布隆过滤器

四、实现逻辑

1、使用 MurmurHash 算法将原始长链接 hash 为 32 位散列值,将散列值转为 BASE62编码 ,即为短链接。

2、用户访问短链接时,在 Redis 中查找是否存在缓存,存在则刷新缓存时间; 缓存中不存在,则去数据库查找,查找成功则添加到 Redis 缓存,302 重定向至原始长链接,并自增短链接访问量; 数据库中若也不存在,则跳转到404页面。

五、部分技术介绍

1、MurmurHash

MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。 与其它流行的MD5等哈希函数相比,对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好。 非加密意味着着相比 MD5,SHA 这些函数它的性能肯定更高(实际上性能是 MD5 等加密算法的十倍以上)。 MurmurHash 有 32 bit、64 bit、128 bit 的实现,32 bit 已经足够表示近 43 亿个短链接。 使用 Java 的话,在 Google 的 
guava 或 
hutool 中有相应实现,这里使用 guava。

2、base62

MurmurHash 生成的哈希值最长有 10 位十进制数,为了进一步缩短短链接长度,可以将哈希值转为 base62 编码,这样最长就只有 6 个字符了。

3、301 和 302 重定向的区别

  • 301,代表 永久重定向,也就是说第一次请求拿到长链接后,下次浏览器再去请求短链的话,不会向短网址服务器请求了,而是直接从浏览器的缓存里拿,这样在 server 层面就无法获取到短网址的点击数了,如果这个链接刚好是某个活动的链接,也就无法分析此活动的效果。所以我们一般不采用 301。
  • 302,代表 临时重定向,也就是说每次去请求短链都会去请求短网址服务器(除非响应中用 Cache-Control 或 Expired 暗示浏览器缓存),这样就便于 server 统计点击数,所以虽然用 302 会给 server 增加一点压力,但在数据异常重要的今天,这点代码是值得的,所以推荐使用 302!

六、项目源码下载

项目源码下载链接https://download.csdn.net/download/weixin_47367099/85397360

点击此处即可下载SpringBoot开发的在线短链生成系统源码一个基于SpringBoot开发的在线短链生成系统源码实现功能1、将长链接转换成短链接,访问短更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_47367099/85397360

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;