短网址服务

Posted peter2014

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了短网址服务相关的知识,希望对你有一定的参考价值。

短网址源于Twitter中140个字符的限制,有时候一个长网址就占了100个字符,所以需要一个服务将长网址转化为短网址,比如百度短网址服务。
技术图片
通常短网址服务需要两个接口:

  • 生成短网址
  • 根据短网址查询长网址

当直接访问短网址时,短网址服务器返回一个302和真实网址,然后浏览器会再去访问长网址

生成短网址

短网址可以类比DNS,也是内部维护了一套对应关系然后提供访问:
技术图片
短网址设计关键点在于后缀token的算法,这里给出一种:

CHARS = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ0123456789"

我们将token认为是一个64进制的数,那8位64进制的数完全可以满足短网址申请的数量且不重复。

基本过程如下:

long_url -> redis.incr(index) -> 10_to_64(index) -> token

当然10_to_64返回的是一个字符串而不是真正的数字,基本实现如下:

def 10_to_64(num):
    if num == 0:
        return CHARS[0]
    res = []
    while num:
        num, rem = divmod(num, len(CHARS))
        res.append(CHARS[rem])
    return ''.join(reversed(res))

获取到token后只要和URL一起存入数据库即可

根据短网址查询长网址

查询时从短网址中解析出token然后查询数据库即可,基本过程如下:

short_url -> token = parse(short_url) -> select url from database where token=`token` -> url

以上是关于短网址服务的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法简记--实现一个短网址系统

短网址生成API接口最新版分析一下现在市面上的短网址情景

网易短网址怎么生成?

怎样使用新浪短网址进行网址缩短-推荐15个在线生成工具

JAVA实现短网址服务的原理是什么?

短网址中的大小写有区别吗