chinesefreesexvideos高潮,欧美极品少妇性运交,久久久国产一区二区三区,99久久婷婷国产综合精品,成人国产一区二区三区

APP推廣合作
聯(lián)系“鳥哥筆記小喬”
#自媒體#
哪些網(wǎng)站可以免費(fèi)發(fā)帖子
好問題
發(fā)帖子往哪個網(wǎng)站發(fā)好??有沒有免費(fèi)的短網(wǎng)址工具??
譚蔚
提問日期:2023-04-23 | 瀏覽次數(shù):2269
關(guān)注問題
舉報
查看全部2條回答
3人贊同了該回答
?  我是@程序員小助手, 本文從技術(shù)角度,對短網(wǎng)址進(jìn)行深度挖掘。   網(wǎng)上已經(jīng)有產(chǎn)品,用著還不錯。可是,作為程序員,從零開始造輪子,開發(fā)一個屬于自己的短網(wǎng)址服務(wù)器,這想法amazing!   通過本文,讀者可明白短網(wǎng)址的技術(shù)原理,以及通過Go語言實(shí)現(xiàn)一個短網(wǎng)址服務(wù)。   短網(wǎng)址為什么存在?   微博等產(chǎn)品的興起,活躍了網(wǎng)上的社交圈內(nèi)大多數(shù)用戶。但是微博一般有140字限制,如果不轉(zhuǎn)發(fā),單純評論文字,再加上一段網(wǎng)址,極有可能超過限制而被截斷。   短網(wǎng)址應(yīng)運(yùn)而生,用較短的一個字符串,替換較長的一個字符串,從觀感上講,效果要友好的多。   從技術(shù)原理上說,短網(wǎng)址是一個hash表,用于映射兩個字符串的對應(yīng)關(guān)系。   使用鍵,找到對應(yīng)的值,重定向進(jìn)行訪問,就完成了整個流程。   短網(wǎng)址的一般結(jié)構(gòu),比如新浪的 SwuTjn,其中后端的一段6位字符串,就是用來唯一標(biāo)記一條記錄的ID。那么,使用什么算法,可以生成一條無重復(fù)的ID呢?   使用通用的做法,使用 0-9 A-Z a-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段,分別按位與運(yùn)算,并裁剪到30位。間隔5位選出該位的字符作為該段索引,共有6位。但是這種做法也有幾率發(fā)生重復(fù),也不直觀。   因此本文使用第一種算法生成鍵ID。   分析短網(wǎng)址的特性,包含以下項(xiàng)目:   唯一性:鍵需要全局唯一時效性:鍵需要有過期時間目標(biāo)網(wǎng)址唯一,如果重復(fù),則自動返回既有的鍵。考慮到上述情形,我們使用redis存儲這些對應(yīng)關(guān)系。使用Gin框架作為路由和控制器,提供對外的API訪問。   計算機(jī)中常見的2進(jìn)制,8進(jìn)制,10進(jìn)制,16進(jìn)制,我們此處需要使用62個字符,循環(huán)表示一個整數(shù),那么可稱之為62進(jìn)制。   下面使用go語言實(shí)現(xiàn)這個函數(shù),用于將任意的整數(shù)(uint64)轉(zhuǎn)換為(0-9A-Za-z)的字符串。   需要注意,基礎(chǔ)的方法,就是循環(huán)取余數(shù),根據(jù)進(jìn)制字典,索引相應(yīng)的字符,然后將各個余數(shù)拼接出來,就是結(jié)果。   這個計算方法,與2進(jìn)制,8進(jìn)制,原理是相同的。   由于字典比較長,有62個鍵值對,我們僅列出一部分。   上述函數(shù)的轉(zhuǎn)換結(jié)果,類似于 6489264001 = 75ai0p   下面是對于系統(tǒng)路由,創(chuàng)建短鏈接,以及使用短鏈接訪問目標(biāo)網(wǎng)址的方法。   1 - 規(guī)劃路由   路由比較簡單,一共2個,一個POST方法,生成短鏈接;一個是GET方法,訪問短鏈接。   代碼如下:   2 - 引入redis并初始化   為了方便演示,我們使用redis存儲鍵值,并設(shè)置expire時間。   "github.com/gin-gonic/gin" "github.com/go-redis/redis/v7"我們使用go-redis提供的接口操作redis數(shù)據(jù)庫。   下面是全局的   redis.Client   對象生成,和初始化函數(shù)。   這樣做的好處是,我們?nèi)侄伎梢允褂米兞?rdb 調(diào)用方法操作redis鍵值。   3 - 實(shí)現(xiàn)POST路由方法:add   本函數(shù)用于接收form表單數(shù)據(jù),生成一個全局唯一的 hash ,作為鍵,存入redis,設(shè)置值和過期時間。   代碼如下:   本段我們使用了一個 getCounter 函數(shù),這是設(shè)置在redis內(nèi)的鍵,將其每次請求創(chuàng)建的時候,自增+1,可保證無重復(fù)。根據(jù)這個計數(shù)器,我們調(diào)用 helper的 DecToAny 方法,將其轉(zhuǎn)化為62進(jìn)制的字符串,作為全局唯一的 hash 值。   下圖是 getCounter 的定義:   特別注意的是,helper包,就是我們在“核心函數(shù)”部分定義的函數(shù)。在主函數(shù)體內(nèi)引用。   4 - 實(shí)現(xiàn)GET方法:visit   本函數(shù)主要用于使用上一節(jié)接口生成的短鏈接,進(jìn)行訪問,并自動重定向到目標(biāo)網(wǎng)址。   代碼如下:   對于不存在的短鏈接,或者redis獲取失敗,返回錯誤信息。   如果存在,使用 301 = StatusMovedPermanently 狀態(tài)碼重定向到目標(biāo)地址。   我們使用curl工具,測試上述兩個接口。   首先,使用POST表單提交數(shù)據(jù):   curl -s -X POST -d "target=https://httpbin.org/ip" -d "expire=600" http://localhost:9090/   上述方法,我們提交了兩個參數(shù),命中路由之后,會訪問上一節(jié)第3條的add方法,并生成一個短鏈接網(wǎng)址。返回JSON格式數(shù)據(jù)如下:   {"message":"ok","short_url":"http://localhost:9090/75ai0r","status":1}   其中,short_url 就是短網(wǎng)址。   接著,我們在使用curl訪問這個鏈接,看是否發(fā)生重定向。截圖如下:   可以看到,執(zhí)行了301重定向,并給出了目標(biāo)網(wǎng)址,與我們上述表單想要創(chuàng)建的地址一致。   最后,故障測試。訪問一個不存在的hash,看是否排除異常信息。截圖如下:   可以看到,執(zhí)行了錯誤返回信息。   以上我們使用GO語言框架Gin實(shí)現(xiàn)了兩個路由,并使用redis管理短鏈接。核心函數(shù)使用helper包管理,經(jīng)過測試,實(shí)現(xiàn)了短網(wǎng)址的功能。   以上代碼在本地測試通過,也可部署到線上服務(wù)器對外開發(fā)端口,提供服務(wù),效果是一樣的。   希望通過這個流程,使大家對于短網(wǎng)址的知識,有一些了解,并能根據(jù)自身的編程能力,創(chuàng)作出更好用的短網(wǎng)址服務(wù)。   Happy coding :-)   【本文由 @程序員小助手 發(fā)布,持續(xù)分享編程與程序員成長相關(guān)的內(nèi)容,歡迎關(guān)注】
發(fā)布于2023-04-23
3
0條評論
0收藏
更多回答
展開
2
0條評論
0收藏
查看全部2條回答