什么是短网址(短链接)?如图
用处:
1、短信营销
2、网站留言
3、生成二维码
….
百度云,阿里云,腾讯云现在基本上都提供这个服务,本文介绍使用java实现自己的短链接服务。
短链接看似很复杂,透过现象看本质,你会发现它的核心就是分布式ID唯一算法。
首先你需要一个够短且外网可以访问的域名,比如t.com , a.cn ,…。本文使用的短域名是tt.cn ,我直接修改windows host文件 指向127.0.0.1
关于短链接的算法,我也看了网上其它人写的文章,总体来说有两种
1、基于MD5码
2、自增序列
在介绍这两种算法之前,我们要关注,效率和安全两者的关系。太复杂的算法保证安全一般意味着效率的降低,而根据实际业务,放出去的短链接其实并不需要过多的加密保证规范即可。相反,在访问短链接的时候能够快速寻到原链接这个才是最重要的。
这两种算法逻辑区别:
1、MD5码生成的短链接可能存在碰撞(概率很小)
2、自增序列需要借助第三方发号器(数据库自增,雪花算法,redis incr)…
本文采取的方案是基于google,Hashing + 62进制来完成
这就是一个简单且可用的短链接生成算法,眼尖的小伙伴可能看出来了,ShortLinkUtils#base62Decode,这个反解析的方法是干什么的呢?
假如,你根据mysql自增主键生成短链接,id=100098 ShortLinkUtils#base62Encode 得到短码:N87ja9 。那么ShortLinkUtils#base62Decode 解析N87ja9 得到 100098 ,但是并不建议这样做,因为反解析需要耗费性能,这个算法的时间复杂度是O(n)级别,且算法不能变动,一旦变动前期发出去的短链接无法解析或者需要做适配,增大工作量。因此我们直接用生成的短码映射实际的长链接即可。
全部代码如下: