长链接转短链接

早期短链接广泛应用于图片上传网站,通过缩短网址URL链接字数,达到减少代码字符串的目的。常见于网店图片分类的使用,因有字符个数限制,采用短链接可以达到外链图片的目的。自微博盛行以来,在微博字数有限的特色下,短链接也盛行于微博网站,以节省字数给博主发布更多文字的空间。
问题描述:设计一个短链生成和查询系统,需要提供以下两个功能:
1、提供长链转换短链的接口
2、点击短链能跳转到对应的长链
题目要求:
1、同一个长链生成同一个短链接,不要有多个短链指向同一个长链。
2、同一个短链只能指向某一个长链,短链生成后要固定不变,不能再指向其它长链。
3、给出系统架构,需要考虑高并发解决方案。
4、考虑存储和缓存方案
数据量预估:
1、预计长链接总量500亿
2、长链换短链请求量:10W qps
3、短链跳转请求量:100W qps

解题思路:

长链转短链
使用发号器,为每一个长链请求分配一个短链。发号器号码从 0 自增,所发号码为十进制,再转为 62 进制后(62 进制对应 26 小写字母加上 26大写字母还有 10 数字)作为短链。
62^6约等于36亿,
62^7约等于2000亿,
所以,转化为7位62进制数字

将(发号器10进制数,长链,短链)作为原组,以发号器10进制数作主键,以长链为索引,一并存入MYSQL数据库中;
数据库建表
id,主键
long_url, 长url,唯一索引
number,号码数字
number62,号码的62进制数字串
short_url,短url,唯一索引

将短链作为Key,长链作为Value,存入redis中

短链转长链
使用短链作为Key, 在redis中对长链进行查询,跳转到对应长链接

性能优化:
当发生长链转短链请求时,首先查询MYSQL数据库中是否存在对应原组,若存在直接取出短链返回,若不存在再使用发号器生成对应短链
高并发方案:创建多个发号器,减小发号请求高并发时的压力,比如创建 10000个发号器,为每个发号器分配发号范围,发号器1的编号从 1∼10000,发号器2的编号从10001~20000,以此类推。发号时采用负载均衡轮询机制,减少发号器负担。

存储优化:将mysql数据库存储改变成nosql数据库存储
增加物理设备数

重定向:
301永久重定向,302临时重定向。短url的重定向好像是永久的,所以的用301

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值