要求
- 尽可能的短
方案
短网址的长度
- 我们可以用英文字母和数字来组合,一共有62种,所以长度为n的短网址的个数为62^n
- 我们选用7 远远大于互联网的所有连接的总和
- 我们选用长度为7的连接,由大小写字母和数字组成
一对一还是一对多映射
原网址对应多个短网址,一个短网址的记录会包含诸如访问用户,http的user-agent信息等
以供后续做大数据分析,挖掘数据的价值
如何计算短网址
假设我们的短网址服务是一个7长度的,我们如何计算得到这个短网址呢?
最容易想到的就是使用一个64位整数来通过62位进制的转换来获取,怎么生成这个整数,则就需要用到发号器
怎么存储
存储可以使用mysql和redis都可
跳转301或者302
301永久重定向,短网址会永久重定向到原网址,这对于搜索引擎来说会直接展示原网址
所以使用302临时重定向
预防攻击
- hacker短时间内向tinyUrl服务发送请求,会迅速消耗光url
- 每个ip限制单日请求数量,每个ip每天分配的短url有上限
- hacker使用大量肉鸡来进行攻击
- redis作为缓存,存储长连接与ID的关系,使用LRU来维护,遇到相同的url直接返回id