【文章閱讀】短鏈接服務系統開發
阿新 • • 發佈:2018-06-19
結果 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 其他細節:
- 高位為 0 就不再插入,是為了不至於一開始就往高位插入了 1 導致剛開始值就特別大,轉換出來需要更長的字符串。
- 建議 id 從一個中等模式的大小開始,如 100w,而不是從 1 開始;
- 可以增加緩存提升性能。
- 數據庫大小寫註意事項。
三、結束
【文章閱讀】短鏈接服務系統開發