一個木函生成app怎么添加多個網(wǎng)址 有沒有免費的短網(wǎng)址工具?
有沒有免費的短網(wǎng)址工具?我是@程序員小助手,本文從技術(shù)角度,對短網(wǎng)址參與深度挖掘。前言網(wǎng)上早就有產(chǎn)品,用著還確實不錯??墒牵约俺绦騿T,從頭學習造輪子,變更土地性質(zhì)一個都屬于自己的短網(wǎng)址服務器,這想法
有沒有免費的短網(wǎng)址工具?
我是@程序員小助手,本文從技術(shù)角度,對短網(wǎng)址參與深度挖掘。
前言網(wǎng)上早就有產(chǎn)品,用著還確實不錯??墒牵约俺绦騿T,從頭學習造輪子,變更土地性質(zhì)一個都屬于自己的短網(wǎng)址服務器,這想法amazing!
本文,讀者可很清楚短網(wǎng)址的技術(shù)原理,這些實際Go語言實現(xiàn)程序一個短網(wǎng)址服務。
簡明教程短網(wǎng)址為什么不存在地?
微博等產(chǎn)品的興起,異?;钴S了網(wǎng)上的社交圈內(nèi)大多數(shù)用戶。不過微博象有140字限制,如果沒有不再轉(zhuǎn)發(fā),單單評論文字,再而且一段網(wǎng)址,極有可能最多限制而被截斷。
短網(wǎng)址應運而出,用較短的一個字符串,替換較長的一個字符串,從觀感上講,效果要不友善的多。
從技術(shù)原理上說,短網(wǎng)址是一個hash表,主要用于映射兩個字符串的對應關(guān)系。
可以使用鍵,找到按的值,重定向進行訪問,就成功了整個流程。
短網(wǎng)址算法短網(wǎng)址的一般結(jié)構(gòu),比如新浪的SwuTjn,其中后端的一段6位字符串,就是單獨同樣標記一條記錄的ID。那你,可以使用什么算法,可以不生成一條無反復重復的ID呢?
在用通用的做法,不使用0-9A-Za-z總共62個字符,我們看使用hash鍵位數(shù)三個有多少種排列組合情況。
1位:pow(62,1)62種
2位:pow(62,2)3844種
3位:pow(62,3)238328種
4位:pow(62,4)14776336種
5位:pow(62,5)916132832種
6位:pow(62,6)56800235584種
一般情況下,6個字符,就相當可以使用了,一共568億種可能。
還有一個一種情況是,用原網(wǎng)址字符串的MD5值,約計32位,然后把通過切分為4段,三個按位與運算,并裁剪到30位。不要超過5位推舉該位的字符另外該段索引,共6位??墒沁@種做法也有幾率發(fā)生了什么重復,也不非常直觀。
因此本文不使用第一種算法生成鍵ID。
工具打算分析什么短網(wǎng)址的特性,中有200元以內(nèi)項目:
唯一性:鍵是需要全局同樣時效性:鍵不需要有快過期時間目標網(wǎng)址任何,假如重復,則手動直接返回既有的鍵。決定到根據(jù)上述規(guī)定情形,我們可以使用redis存儲這些對應關(guān)系。在用Gin框架作為路由和控制器,可以提供聯(lián)合的API訪問。
核心函數(shù)計算機中最常見的一種的2進制,8進制,10進制,16進制,我們此處必須建議使用62個字符,循環(huán)來表示一個整數(shù),這樣的話可稱之為62進制。
下面使用go語言實現(xiàn)這個函數(shù),應用于將橫豎斜的整數(shù)(uint64)轉(zhuǎn)換成為(0-9A-Za-z)的字符串。
不需要盡量,基礎的方法,那是運行取余數(shù),根據(jù)進制字典,索引相對應的字符,然后將各個余數(shù)拼接出,那就是結(jié)果。
這個計算方法,與2進制,8進制,原理是相同的。
因此字典比較好長,有62個鍵值對,我們僅列出來一部分。
上述函數(shù)的轉(zhuǎn)換結(jié)果,像648926400175ai0p
功能規(guī)劃下面是相對于系統(tǒng)路由,修改短鏈接,和使用短鏈接ftp連接目標網(wǎng)址的方法。
1-規(guī)劃路由
路由比較比較簡單的,最少2個,一個POST方法,生成氣體短鏈接;一個是GET方法,ftp訪問短鏈接。
代碼::
2-引導出redis并初始化
目的是方便啊演示,我們建議使用redis存儲鍵值,并設置expire時間。我們不使用go-redis可以提供的接口操作redis數(shù)據(jù)庫。
下面是全局的
對象化合,和系統(tǒng)初始化函數(shù)。
這樣的話做的好處是,我們?nèi)侄伎梢越ㄗh使用變量rdb動態(tài)創(chuàng)建方法操作redis鍵值。
3-實現(xiàn)POST路由方法:omit
本函數(shù)主要是用于接收form表單數(shù)據(jù),能生成一個全局真正的hash,充當鍵,存入redis,設置中值和有效期時間。
代碼追加:
本段我們在用了一個getCounter函數(shù),這是設置在redis內(nèi)的鍵,將其每次各位創(chuàng)建角色的時候,自增1,可能保證無重復。依據(jù)什么這個計數(shù)器,我們調(diào)用helper的DecToAny方法,將其能量轉(zhuǎn)化為62進制的字符串,另外全局同樣的hash值。
下圖是getCounter的定義:
最重要的盡量的是,helper包,是我們在“核心函數(shù)”部分定義的函數(shù)。在主函數(shù)體內(nèi)摘錄。
4-實現(xiàn)GET方法:visit
本函數(shù)主要注意應用于使用上一節(jié)接口化合的短鏈接,接受訪問,并自動出現(xiàn)重定向到目標網(wǎng)址。
代碼不勝感激:
對于不存在的短鏈接,或者redis聲望兌換失敗,趕往錯誤`信息。
如果存在,在用301StatusMovedPermanently狀態(tài)碼重定向到目標地址。
測試我們不使用curl工具,測試3上列兩個接口。
簡單,使用POST表單遞交數(shù)據(jù):
curl-s-XPOST-dtarget-dexpire600:9090/
本案所涉方法,我們遞交了兩個參數(shù),爆擊路由之后,會訪問網(wǎng)絡上一節(jié)第3條的add方法,并生成氣體一個短鏈接網(wǎng)址。前往JSON格式數(shù)據(jù)萬分感謝:
{message:ok,large_url::9090/75ai0r,status:1}
其中,short_url就是短網(wǎng)址。
隨后,我們在建議使用curlftp連接這個鏈接,看有無發(fā)生重定向。截圖萬分感謝:
可以看到,執(zhí)行了301重定向,并提出了目標網(wǎng)址,與我們上述表單要想創(chuàng)建的地址相同。
最后,故障測試。ftp連接一個不修真者的存在的hash,看是否是首先排除異常信息。截圖不勝感激:
看的到,先執(zhí)行了錯誤直接返回信息。
結(jié)語以上我們可以使用GO語言框架Gin實現(xiàn)了兩個路由,并建議使用redis管理短鏈接。核心函數(shù)可以使用helper包管理,經(jīng)過測量,實現(xiàn)方法了短網(wǎng)址的功能。
不超過代碼在本地測試通過,也可防御部署到線上服務器組織開發(fā)端口,提供服務,效果是一樣的。
希望按照這個流程,使大家對于短網(wǎng)址的知識,有一些打聽一下,并能依據(jù)什么自身的編程能力,創(chuàng)作作品出更合適得用短網(wǎng)址服務。
beautifulcoding:-)
【本文由@程序員小助手先發(fā)布,緩慢分享分享編程與程序員相關(guān)的內(nèi)容,記得關(guān)注】
必備手機應用有哪些呢?
很歡喜能問你的問題,手機必備軟件,相對于每個人來說,是都一樣的,下面是我個人觀點,期望能幫助到你,謝謝啦
視頻打開程序中...