返回归档
📽️工程与设计

如何构建一个短链系统

文章目录

典型读多写少的场景,需要考虑高并发的读取的场景。所以缓存和恶意请求需要处理得当。

image

对于长链接转短链接的场景

参数校验

  1. 判断长链接能够访问通
  2. 判断长链接不是一个短链接(防止循环转链)

构造链接

  1. 发号器发号(可以是redis的string、mysql的主键或雪花算法生成的id),给这个长链接对应的一个编号
  2. 用base62转码为62进制的数字来标识这个数字,得到一个字符串(这时可以按照需求处理,黑名单设置、敏感词过滤)

数据存储

  1. 加入bloomFilter
  2. 长链接和短链接的对应关系存入db、cache

对于短链接读取长链接的场景

  1. 先从过滤器中过滤恶意请求
  2. 从redis获取相应的数据
  3. 可以将访问信息写入kafka中,后期大数据团队也可以去离线或在线消费这些数据
  4. 若redis中没有,从db中获取,redis中存入这个短链接对应长链接的关系
  5. 服务器302重定向到对应的网页

ref

bookmark

demo repo 地址 https://github.com/Forrest-Tao/URLConverting