通过hash算法产生短网址
要点:
- 选择冲撞小、高效的的hash函数,MurmueHash算法。有32bit和128bit,短连接我们可以选择32bits,求原始地址的hashCode
- 进一步缩短网址:网址我们一般会采用a-zA-Z0-9等62个字符,我们可以通过除法、并且取模来生成网址,见代码
- 解决Hash冲突,将原始地址和短连接地址保存起来(redis or mysql)等,当我们发现短连接已经存在并且和原始地址一致可直接返回,如果存在,且和原始地址不一致我们可以加一些额外字段,比如当前的纳秒数等等作为计算hash的种子
1 | public class ShortUrlGenerator { |
通过自增ID
- 对比上面的方式,对于相同的网址,我们会产生不同的短连接,但是会减少判重的次数(数据库的交互)
- 自增ID是全局的,肯定要加锁,为了增加并发我们可以同时用多个发号器来解决,类似分库分表的思想。