1. 程式人生 > >【文章閱讀】短鏈接服務系統開發

【文章閱讀】短鏈接服務系統開發

結果 border als 十進制 實現 小寫 .com 性能 play

一、短鏈接服務系統開發

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. 數據庫大小寫註意事項。

三、結束

【文章閱讀】短鏈接服務系統開發