温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 怎么用Java设计一个短链接生成系统

怎么用Java设计一个短链接生成系统

发布时间:2021-12-11 15:47:49 来源:亿速云 阅读:385 作者:iii 栏目: 开发技术

这篇文章主要讲解了“怎么用Java设计一个短链接生成系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java设计一个短链接生成系统”吧!

引言

相信大家在生活中,特别是最近的双十一活动期间,会收到很多短信,而那些短信都有两个特征,第一个是几乎都是垃圾短信,这个特点此处可以忽略不计,第二个特点是链接很短,比如下面这个:

怎么用Java设计一个短链接生成系统

我们知道,短信有些是有字数限制的,直接放一个带满各种参数的链接,不合适,另外一点是,不想暴露参数。好处无非以下:

  • 太长的链接容易被限制长度

  • 短链接看着简洁,长链接看着容易懵

  • 安全,不想暴露参数

  • 可以统一链接转换,当然也可以实现统计点击次数等操作

那背后的原理是什么呢?怎么实现的?让你实现这样的系统,你会怎么设计呢?【来自于某鹅场面试官】

短链接的原理

短链接展示的逻辑

这里最重要的知识点是重定向,先复习一下http的状态码:

分类含义
1** 服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

那么以 3 开头的状态码都是关于重定向的:

  • 300:多种选择,可以在多个位置存在

  • 301:永久重定向,浏览器会缓存,自动重定向到新的地址

  • 302:临时重定向,客户端还是会继续使用旧的URL

  • 303:查看其他的地址,类似于301

  • 304:未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。

  • 305:需要使用代理才能访问到资源

  • 306:废弃的状态码

  • 307:临时重定向,使用Get请求重定向

整个跳转的流程:

1.用户访问短链接,请求到达服务器

2.服务器将短链接装换成为长链接,然后给浏览器返回重定向的状态码301/302

301永久重定向会导致浏览器缓存重定向地址,短链接系统统计访问次数会不正确

302临时重定向可以解决次数不准的问题,但是每次都会到短链接系统转换,服务器压力会变大。

3.浏览器拿到重定向的状态码,以及真正需要访问的地址,重定向到真正的长链接上。

从下图可以看出,确实链接被302重定向到新的地址上去,返回的头里面有一个字段Location就是所要重定向的地址:

怎么用Java设计一个短链接生成系统

短链接怎么设计的

全局发号器

肯定我们第一点想到的是压缩,像文件压缩那样,压缩之后再解压还原到原来的链接,重定向到原来的链接,但是很不幸的是,这个是行不通的,你有见过什么压缩方式能把这么长的数字直接压缩到这么短么?事实上不可能。就像是Huffman树,也只能对那种重复字符较多的字符串压缩时效率较高,像链接这种,可能带很多参数,而且各种不规则的情况都有,直接压缩算法不现实。

那https://dx.10086.cn/tzHLFw与https://gd.10086.cn/gmccapp/webpage/payPhonemoney/index.html?channel=之间的装换是怎么样的呢?前面路径不变,变化的是后面,也就是tzHLFw与gmccapp/webpage/payPhonemoney/index.html?channel=之间的转换。

实际也很简单,就是数据库里面的一条数据,一个id对应长链接(相当于全局的发号器,全局唯一的ID):

idurl
1gd.10086.cn/gmccapp/web…

这里用到的,也就是我们之前说过的分布式全局唯一ID,如果我们直接用id作为参数,貌似也可以:https://dx.10086.cn/1,访问这个链接时,去数据库查询获得真正的url,再重定向。

单机的唯一ID很简单,用原子类AtomicLong就可以,但是分布式的就不行了,简单点可以用 redis,或者数据库自增,或者可以考虑Zookeeper之类的。

id 转换策略

但是直接用递增的数字,有两个坏处:

  • 数字很大的时候,还是很长

  • 递增的数字,不安全,规律性太强了

明显我们平时看到的链接也不是数字的,一般都是大小写字母加上数字。为了缩短链接的长度,我们必须把id转换掉,比如我们的短链接由a-z,A-Z,0-9组成,相当于62进制的数字,将id转换成为62进制的数字:

public class ShortUrl {
 
    private static final String BASE = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 
    public static String toBase62(long num) {
        StringBuilder result = new StringBuilder();
        do {
            int i = (int) (num % 62);
            result.append(BASE.charAt(i));
            num /= 62;
        } while (num > 0);
 
        return result.reverse().toString();
    }
 
    public static long toBase10(String str) {
        long result = 0;
        for (int i = 0; i < str.length(); i++) {
            result = result * 62 + BASE.indexOf(str.charAt(i));
        }
        return result;
    }
 
    public static void main(String[] args) {
        // tzHLFw
        System.out.println(toBase10("tzHLFw"));
        System.out.println(toBase62(27095455234L));
    }
}

id转 62位的key 或者key装换成为id都已经实现了,不过计算还是比较耗时的,不如加个字段存起来,于是数据库变成了:

idkeyurl
27095455234tzHLFwgd.10086.cn/gmccapp/web…

但是这样还是很容易被猜出这个id和key的对应关系,要是被遍历访问,那还是很不安全的,如果担心,可以随机将短链接的字符顺序打乱,或者在适当的位置加上一些随机生成的字符,比如第1,4,5 位是随机字符,其他位置不变,只要我们计算的时候,将它对应的关系存到数据库,我们就可以通过连接的key找到对应的url。(值得注意的是,key必须是全局唯一的,如果冲突,必须重新生成)

一般短链接都有过期时间,那么我们也必须在数据库里面加上对应的字段,访问的时候,先判断是否过期,过期则不给予重定向。

怎么用Java设计一个短链接生成系统

性能考虑

如果有很多短链接暴露出去了,数据库里面数据很多,这个时候可以考虑使用缓存优化,生成的时候顺便把缓存写入,然后读取的时候,走缓存即可,因为一般短链接和长链接的关系不会修改,即使修改,也是很低频的事情。

如果系统的id用完了怎么办?这种概率很小,如果真的发生,可以重用旧的已经失效的id号。

如果被人疯狂请求一些不存在的短链接怎么办?其实这就是缓存穿透,缓存穿透是指,缓存和数据库都没有的数据,被大量请求,比如订单号不可能为-1,但是用户请求了大量订单号为-1的数据,由于数据不存在,缓存就也不会存在该数据,所有的请求都会直接穿透到数据库。如果被恶意用户利用,疯狂请求不存在的数据,就会导致数据库压力过大,甚至垮掉。

针对这种情况,一般可以用布隆过滤器过滤掉不存在的数据请求,但是我们这里id本来就是递增且有序的,其实我们范围大致都是已知的,更加容易判断,超出的肯定不存在,或者请求到的时候,缓存里面放一个空对象也是没有问题的。

感谢各位的阅读,以上就是“怎么用Java设计一个短链接生成系统”的内容了,经过本文的学习后,相信大家对怎么用Java设计一个短链接生成系统这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节
推荐阅读:
  1. 短网址生成链接接口平台推荐--新浪T.CN短链接 腾讯URL短链接生成地址
  2. java学生成绩管理系统设计与实现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java
  • 上一篇新闻:
    SpringBoot中常用的注解有哪些
  • 下一篇新闻:
    HyperLedger Fabric 2.0-release如何测试网络部署

猜你喜欢

  • MFC定时发送实时更新数据的方法是什么
  • python中info函数的用法是什么
  • pandas怎么查看数据库信息
  • word出现错误对话框Built
  • word方框中打勾的符号怎么输入
  • 如何解决Office报错提示“不是有效的win32应用程序”问题
  • 网页打不开怎么办电脑打不开网页的方法介绍
  • cookies设置怎么打开
  • Java打印输出bbwbbw
  • python怎么将一个数组逆序输出
最新资讯
  • Privoxy与Ubuntu浏览器的深度集成
  • Ubuntu用户如何优化Privoxy的CPU占用
  • Privoxy在Ubuntu中提升网络隐私的方法
  • Ubuntu中Privoxy的缓存机制分析
  • Privoxy与Ubuntu防火墙的配合使用
  • Ubuntu用户如何调试Privoxy问题
  • Ubuntu系统Privoxy的兼容性测试报告
  • Privoxy如何帮助Ubuntu用户绕过地域限制
  • Ubuntu中Privoxy的透明代理模式
  • Privoxy在Ubuntu中解决HTTPS问题
相关推荐
  • PHP如何实现短链接生成
  • 怎么设计一个RPC系统
  • 短链接快速生成方式
  • 如何把一个长链接转短链接 短链接转化器该如何使用
  • 新浪短链接 推荐几个最新的新浪t.cn短链接生成平台
  • 如何设计一个RPC系统?
  • 如何批量生成短链接,短链接的使用真的有很多好处吗
  • php生成短网址/短链接的方法是什么
  • 怎么生成短链接URL
  • 如何用java设计系统

相关标签

java教程 javafx教程 java学习路线 java开发 java线程 java架构师 java程序 学java 初学java java_home java配置 java类 java开发环境 java语言 java14 java乱码 java注解 javacv weixin-java-miniapp javax.servlet
AI

深圳坪山网站建设公司宁波本地网站优化哪家好威海响应式网站优化网站seo如何优化网站搜索优化立联火27星网站排名优化技术优化网站内部结构绍兴网站优化怎样做南京网站优化怎么样如何优化啊里网站排名常州专业的seo网站优化费用辽宁低价珠宝行业网站优化嘉兴网站优化排网站上怎么优化图片实用的企业网站优化技巧横沥电子网站优化做什么福田个人如何做网站优化比较好郑州网站优化哪里做得好网站首页关键词优化建议福州网站优化服务山东网站seo优化工具大连长海网站优化通化百度网站优化广西省网站优化加盟民权专业网站关键词优化多少钱项城网站优化哪家有实力菠菜网站优化黄浦区360网站优化方案定制二七区网站优化广州培训网站制作网络优化石景山网站优化的公司香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化