短网址服务
- 生成短网址,将原始的长网址转化为短网址
- 访问短网址,当用户点击短网址时,重定向到原始网址
生成短网址
- 哈希算法
- 使用哈希算法,将长网址转化成一个固定长度的哈希值
- 哈希算法的选择,不需要考虑反向解密,只需要关心哈希算法的计算和冲突概率,选用 MurmurHash 算法,可以得到 32 bits 或 128 bits 长度的哈希值
- 如何让短网址更短
- 将 MurmurHash 算法得到的哈希值,转化为更高进制的哈希值,如 62 进制,即包含了 0~9、a~z、A~Z 的 62 个字符
- 解决哈希冲突
- 当新的原始网址需要生成短网址的时候,先通过哈希算法得到短网址
- 在存储数据库中查找是否已经存在此短网址,如果存在,且原始网址一样,则返回短网址,如果存在,且原始网址不一样,可以将原始网址后拼接一个特殊字符串,再计算哈希值,如果仍旧冲突,则换一个拼接字符串继续尝试
- 优化
- 可以借助数据库的唯一索引,来减少从数据库中获取原始网址的次数,当出现唯一索引冲突时,再去执行“查询、写入”的过程
- 使用布隆过滤器来判断短网址是否有冲突
- ID 生成器