什么是短链接?
短链接就是就是把普通的链接转换为较短的网址。比如常见的我们收到的营销短信中链接hm.tb.cn/x.V8VgyA
短链接优点:短,字符少,美观,便于发布传播。
百度短网址: dwz.cn/
谷歌短网址: goo.gl/
实现原理
基本原理大概可以分为下面5步
- 用户输入短链接网址hm.tb.cn/x.V8VgyA
- DNS解析hm.tb.cn IP地址
- 解析出来IP地址,发送HTTP GET请求,查询短码x.V8VgyA
- 服务器通过短码查询对应长URL
- 通过301重定向跳转到对应的长URL
注:这里我们要区分301和302重定向的区别,看具体自己应用场景。
HTTP响应状态代码,301 是永久重定向, 302 是临时重定向
301 永久重定向,GET请求301跳转会默认被浏览器缓存起来。302 GET请求默认不会被缓存
短链接转换核心算法
如何将长链接转换为短链接,我们一般的应用场景比如短信营销,用户通过短链接跳转到对应的营销活动落地页面,短链接长链接转换的核心其实就是长链短链的映射关系,以及如何将长链接转换为短链接。
一般常用的有两种算法1. 哈希 2. 全局唯一ID算法
- 1. MurmurHash 哈希算法
哈希算法有很多种,应用广泛且性能较高的MurmurHash算法,比如我们常见的Redis一致性Hash算法就是基于MurmurHash实现的。
MurmurHash 提供了两种长度的哈希值,128bits和32bits,
- 2. 全局唯一ID
全局唯一ID,其实我们能想到的就有很多,比如手机号码,会员ID等,或者代码生成比如雪花算法,MySQL自增ID。
获取唯一的短码之后,我们需要短码尽可能的短,还需要将long型id转换为BASE62字符,Base62比BASE64少了两个字符’/‘,’+’
1 | java复制代码public class Base62Utils { |
数据存储设计
数据存储设计,主要还是看具体的业务场景,比如数据量在百亿级别,MySQL估计是搞不定了。那么如何选型NoSQL数据库?常见的NoSQL数据库MongoDB, Hbase,ES,DynamoDB, Cassandra 或者 Riak等等。具体的业务选型还需要考虑你们公司所在的技术栈和运维成本等等。
如何支持高并发?如何防止缓存穿透等等?
参考:
time.geekbang.org/column/arti…
本文转载自: 掘金