zoukankan      html  css  js  c++  java
  • 【文章阅读】短链接服务系统开发

    一、短链接服务系统开发

    https://www.javadoop.com/post/url-shortener?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

    二、思路说明

    文章很棒,不过最重要的是思路,在可实现的思路下,你会发现每一步都不难。
    本文目的就是整理思路,然后让自己实现。

    1、功能:

    长链转短链,短链跳转到长链。

    2、如何保证短链唯一:

    短链是一个字符串,只需由一个唯一的ID,可以根据某种规则,转换出唯一的字符串即可。所以问题变成了如果找到一个长链对应的唯一ID。
    而对于唯一标识,莫过于数据库自增ID了。

    这里需区分单表和多表。单表,数据库自增 id 肯定唯一;多库多表,肯定有一全局发号器来生成唯一 id。

    3、生成key(短链)的逻辑:进制转换;

    文中使用的是62进制转换,因为字符 a-z、A-Z 和 0-9 共 62 个字符,可以用于生成短链。
    只需将十进制ID转换为62进制即可。进制转换详情可以参考:除基倒取余法。

    4、长链转短链

    数据库中查询;

    5、优化:增加随机码,防止短链被破译:

    5.1 打乱 BASE 字符串
    5.2 加随机字符串,如固定在开头或结尾加 2 位随机字符串

    算法的安全性保证:两个不一样的数,在固定位置都插入随机位,结果一定不一样。

    5.3 其他细节:

    1. 高位为 0 就不再插入,是为了不至于一开始就往高位插入了 1 导致刚开始值就特别大,转换出来需要更长的字符串。
    2. 建议 id 从一个中等模式的大小开始,如 100w,而不是从 1 开始;
    3. 可以增加缓存提升性能。
    4. 数据库大小写注意事项。

    三、结束<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    Python模糊查询本地文件夹去除文件后缀(7行代码)
    Python正则表达式
    python的logging模块
    Python中hashlib模块
    Python的os模块
    项目初始化mysql建库和授权
    Add correct host key in /root/.ssh/known_hosts to get rid of this message
    高中典型的等比数学题
    autoenv的使用方法
    celery任务进程关闭
  • 原文地址:https://www.cnblogs.com/buwuliao/p/9196538.html
Copyright © 2011-2022 走看看