java 短链接url_Java 网址短链接服务原理及解决方案

一、背景

现在在各种圈的产品各种推广地址,由于URL地址过长,不美观、不方便收藏、发布、传播以及各种发文字数限制等问题,微信、微博都在使用短链接技术。最近由于使用的三方的生成、解析短链接服务开始限制使用以及准备收费、不方便统计分析、不方便流控等问题,决定自建一个短地址服务。

二、原理

比如,http://a.b.com/15uOVS 这个短地址

第1步,浏览器请求这个地址

第2步,通过DNS后到短地址服务端,还原这个短地址对应的原始长地址。

第3步,请求http 301 或302到原始的长地址上

第4步,浏览器拿到原始长地址的响应response

三、实现

短地址服务的核心是短地址和长地址的转化映射算法。

最简单的算法是把原来的长地址做MD5摘要记为key,长地址记为value。把key value放入服务端缓存中比如redis中。

反向解析时通过URL解决出key来,比如上面的短地址key = 15uOVS 。然后通过key去缓存中获取原始长地址value实现URL地址还原。

MD5摘要有几个明显的问题:

1、短地址的长度受限,比如MD5后的数据长度是32位,需要进行分段循环处理,使短地址足够短

2、MD5的哈希碰撞问题,有一定的概率重复,解决此问题,需要不断的提升算法的复杂度,有些得不偿失

当然不止MD5实现算法比较多,大家可以自行谷歌。

笔者的实现原理如下:

1、新建一张表,主要字段包括自增ID【这里有个小技巧,可以给自增ID设置一个漂亮的起步值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值