当前位置: 首页 > 科技观察

Java实现短网址服务的原理是什么?

时间:2023-03-11 20:24:40 科技观察

针对部分用户担心短网址会不会重复的问题,这里详细介绍短链接(https://suolink.cn)平台的短网址服务原理,所以可以让用户对短网址有更深入的了解,解除其后顾之忧。Q:那么小长应该有一定的概率会重复?一定时间后不可用吗?A:短网址(ShortURL),顾名思义,就是形式比较短的网址。通常使用asp或者php来转。在Web2.0的今天,不得不说这是一种趋势。目前,类似的服务有很多。借助短网址,您可以将原来冗长的网址替换为短网址,以便用户更轻松地共享链接。很多朋友可能对短网址服务不再陌生。现在微博、手机邮件提醒等大部分地方都有很多应用方式,已经占据了一定的市场。估计现在很多朋友也在用。看了新浪的短连接服务后,发现后面主要是6个字符串,于是第一个想到的是原公司写的一个游戏激活码规则,就是下面的算法2,26个大写字母和26个小写字母,10个数字,随机生成6个然后对应一个id插入到数据库中。短连接跳转时,根据字符串查询对应的id,即可实现对应的跳转!但是2的62次方,不知道有没有重复的,小概率有可能,不过对于不是很大的网站应该够用了。自从twitter推出短网址(shorturl),国内各大微博纷纷效仿,谷歌发布goo.gl使用API??后,短网址的趋势愈演愈烈。我不得不说这是一个新的流行的web2.0服务。我来梳理一下,包括完整的短网址网站,短网址生成原理,算法实例,优缺点对比。短链接的好处:内容需要;方便使用的;易于管理。你为什么要这样做?我觉得有几个原因:微博限制字数140字,所以如果我们需要发一些链接,但是这个链接太长了,占了我们内容的近一半,这肯定是不允许的,太短了网址应运而生。在我们的项目中,短网址可以很好地管理开放级别的网址。部分网址可能含有暴力、广告等信息,以便我们通过用户举报完全管理该链接,不会出现在我们的应用中。应该是同一个URL经过加密算法后,得到的地址是一样的。我们可以对一系列的网址进行流量和点击统计,挖掘出大部分用户的关注点,有助于我们对项目的后续工作做出更好的决策。算法原理算法一1)将长URL的md5生成一个32位的签名串,分成4段,每段8字节;2)循环处理这4段,取8个字节,看成16进制String和0x3fffffff(30位1)AND运算,即忽略超过30位的处理;3)将这30位分成6段,每5位数字作为字母表的索引,得到一个特定的字符,依次得到6位字符串;4)从总的md5字符串中可以得到4个6位数字的字符串;其中任意一个都可以作为这个长url的短url地址;这个算法虽然会生成4,但是还是有重复的机会,下面的算法一和三,就是这个的实现。算法2a-zA-Z0-964位和6位的组合可以产生超过500亿种组合。数字和字符的组合可以在一定程度上进行映射,生成一个唯一的字符串,比如第62个组合是aaaaa9,第63个组合是aaaaba,然后用混洗算法对原字符串进行打乱保存,再进行组合相应位置的字符串将是一个无序组合。将长URL存入数据库,获取返回的id,找出对应的字符串。比如返回的ID是1,那么上面对应的字符串组合就是bbb。同样,当ID为2时,字符串的组合为bba,以此类推,重复的可能性要到64个组合才会出现,所以如果你用上面的62个字符,随机取6个字符组成一个字符串,你的数据存储要达到500亿以上才会出现重复的可能性。详见新浪微博界面完整改进和超短网址算法。算法4可以看作是该算法的一种实现。这个算法一般不会重复,但是如果统计的话,就存在很大的问题,尤其是对域名相关的统计是盲目的。JAVA实现代码:publicclassShortUrlGenerator{/**@paramargs*/publicstaticvoidmain(String[]args){StringsLongUrl="QQ空间";//长链接String[]aResult=shortUrl(sLongUrl);//打印出结果for(inti=0;i>5;}//将字符串存入对应索引的输出数组resUrl[i]=outChars;}返回resUrl;}}