四时宝库

程序员的知识宝库

57挑战之54,实现一个url 跳转服务(一)

不容易,终于到54题了。


理解题目首先成功了一半,



写一个web 应用,允许用户输入一个长URL,转化这个长的URL到一个短的URL,和https://goo.gl/类似。

1)程序应该有表格,能接收长URL

2)程序应产生一个短的本地url比如/abc1234,然后把短URL和长URL存储在一起,放在一个持久的数仓里。

3)当短URL被键入,程序应该重定向用户到长URL。

4)程序应该能追踪短链接被访问的次数。

5)程序应该有一个统计页面,针对短的URL,比如/abc1234/stats,访问这个URL应该可以展示短url,长URL,以及短URL被访问的次数。

限制:

  1. 此应用必须放在持久存储层,其它用户可以使用,这意味着内存型系统不合适。
  2. 别让无效URL被填入表格。

挑战能力:

  1. 查询重复的URL,别创造重复的短URL,当已经存在一个短URL的时候。
  2. 使用Redis作为数据存储。
  3. 使用RavenDB作为数据存储。
  4. 记录每次短URL被输入的时间,使用一个library来把请求视图化。


基于上面的请求,做一个相对应的理解。

  • 1.表格接受长URL,监测长URL是否有效,如果有效则存储到redis.

需要做一个函数,检查URL是否有效,如果get 返参200 则url 有效。

  • 2.持久数仓 放redis, key和value 。都可以用URL来做。
  • 3.使用http.server里面的 301 redirect 方案,send.header('location',new_path)方式来实现。
  • 4.做一个单独表,基于短链做计数器。
  • 挑战要求里面,需要判断短url 不要重复,可以用redis的key逻辑 来避免重复。
  • 挑战要求里面,需要做一个机制,保障每次随机产生的短链不要重复。(序列+随机生产方式来实现)
  • 挑战要求里面要求做统计:可根据短URL,做一个kv存储,value 里面存储做一个字典(hash方式)记录短URL被访问的次数,以及访问时间等。


明天把设计原型逻辑图画出来。待续。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接