0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

18種接口優(yōu)化方案匯總1

jf_78858299 ? 來(lái)源:撿田螺的小男孩 ? 作者:撿田螺的小男孩 ? 2023-02-15 15:59 ? 次閱讀

之前工作中,遇到一個(gè)504超時(shí)問(wèn)題。原因是因?yàn)?a target="_blank">接口耗時(shí)過(guò)長(zhǎng),超過(guò)nginx配置的10秒。然后 真槍實(shí)彈搞了一次接口性能優(yōu)化,最后接口從11.3s降為170ms。本文將跟小伙伴們分享接口優(yōu)化的一些通用方案。

1. 批量思想:批量操作數(shù)據(jù)庫(kù)

優(yōu)化前:

//for循環(huán)單筆入庫(kù)
for(TransDetail detail:transDetailList){
  insert(detail);  
}

優(yōu)化后:

batchInsert(transDetailList);

打個(gè)比喻:

打個(gè)比喻:假如你需要搬一萬(wàn)塊磚到樓頂,你有一個(gè)電梯,電梯一次可以放適量的磚(最多放500), 你可以選擇一次運(yùn)送一塊磚,也可以一次運(yùn)送500,你覺(jué)得哪種方式更方便,時(shí)間消耗更少?

2. 異步思想:耗時(shí)操作,考慮放到異步執(zhí)行

耗時(shí)操作,考慮用 異步處理 ,這樣可以降低接口耗時(shí)。

假設(shè)一個(gè)轉(zhuǎn)賬接口,匹配聯(lián)行號(hào),是同步執(zhí)行的, 但是它的操作耗時(shí)有點(diǎn)長(zhǎng) ,優(yōu)化前的流程:

圖片

為了降低接口耗時(shí),更快返回,你可以把匹配聯(lián)行號(hào)移到 異步處理 ,優(yōu)化后:

圖片

  • 除了轉(zhuǎn)賬這個(gè)例子,日常工作中還有很多這種例子。比如: 用戶注冊(cè)成功后,短信郵件通知,也是可以異步處理的 ~
  • 至于異步的實(shí)現(xiàn)方式, 你可以用線程池,也可以用消息隊(duì)列實(shí)現(xiàn) 。

3. 空間換時(shí)間思想:恰當(dāng)使用緩存。

在適當(dāng)?shù)臉I(yè)務(wù)場(chǎng)景,恰當(dāng)?shù)厥褂镁彺妫强梢源蟠筇岣呓涌谛阅艿?。緩存其?shí)就是一種 空間換時(shí)間的思想 ,就是你把要查的數(shù)據(jù),提前放好到緩存里面,需要時(shí), 直接查緩存,而避免去查數(shù)據(jù)庫(kù)或者計(jì)算的過(guò)程 。

這里的緩存包括:Redis緩存,JVM本地緩存,memcached,或者Map等等。我舉個(gè)我工作中,一次使用緩存優(yōu)化的設(shè)計(jì)吧,比較簡(jiǎn)單,但是思路很有借鑒的意義。

那是一次轉(zhuǎn)賬接口的優(yōu)化, 老代碼 ,每次轉(zhuǎn)賬,都會(huì)根據(jù)客戶賬號(hào),查詢數(shù)據(jù)庫(kù),計(jì)算匹配聯(lián)行號(hào)。

圖片

因?yàn)槊看?都查數(shù)據(jù)庫(kù),都計(jì)算匹配,比較耗時(shí) ,所以 使用緩存 ,優(yōu)化后流程如下:

圖片

4. 預(yù)取思想:提前初始化到緩存

預(yù)取思想很容易理解,就是 提前把要計(jì)算查詢的數(shù)據(jù),初始化到緩存 。如果你在未來(lái)某個(gè)時(shí)間需要用到某個(gè)經(jīng)過(guò)復(fù)雜計(jì)算的數(shù)據(jù), 才實(shí)時(shí)去計(jì)算的話,可能耗時(shí)比較大 。這時(shí)候,我們可以采取預(yù)取思想, 提前把將來(lái)可能需要的數(shù)據(jù)計(jì)算好,放到緩存中 ,等需要的時(shí)候,去緩存取就行。這將大幅度提高接口性能。

我記得以前在第一個(gè)公司視頻直播的時(shí)候,看到我們的直播列表就是用到 這種優(yōu)化方案 。就是啟動(dòng)個(gè)任務(wù), 提前把直播用戶、積分等相關(guān)信息,初始化到緩存

5. 池化思想:預(yù)分配與循環(huán)使用

大家應(yīng)該都記得, 我們?yōu)槭裁葱枰褂镁€程池 ?

線程池可以幫我們管理線程,避免增加創(chuàng)建線程和銷毀線程的資源損耗。

如果你每次需要用到線程,都去創(chuàng)建,就會(huì)有增加一定的耗時(shí),而線程池可以重復(fù)利用線程,避免不必要的耗時(shí)。 池化技術(shù)不僅僅指線程池,很多場(chǎng)景都有池化思想的體現(xiàn),它的本質(zhì)就是 預(yù)分配與循環(huán)使用 。

比如TCP三次握手,大家都很熟悉吧,它為了減少性能損耗,引入了Keep-Alive長(zhǎng)連接,避免頻繁的創(chuàng)建和銷毀連接。當(dāng)然,類似的例子還有很多,如數(shù)據(jù)庫(kù)連接池、HttpClient連接池。

我們寫代碼的過(guò)程中, 學(xué)會(huì)池化思想 ,最直接相關(guān)的就是使用線程池而不是去new一個(gè)線程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口優(yōu)化
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1344
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電平轉(zhuǎn)換方案匯總

    電平轉(zhuǎn)換方案匯總
    發(fā)表于 04-05 22:18

    示波器探頭接口整理匯總

    示波器探頭接口整理匯總
    發(fā)表于 11-17 15:03

    分享一WLAN射頻優(yōu)化的解決方案

    分享一WLAN射頻優(yōu)化的解決方案
    發(fā)表于 05-24 06:29

    介紹一基于FIFO結(jié)構(gòu)的優(yōu)化端點(diǎn)設(shè)計(jì)方案

    本文介紹一基于FIFO結(jié)構(gòu)的優(yōu)化端點(diǎn)設(shè)計(jì)方案。
    發(fā)表于 05-31 06:31

    分享一基于littlevgl2rtt軟件包的RGB屏幕接口優(yōu)化方案

    大佬無(wú)私的提供技術(shù)支持,幫忙解決問(wèn)題?,F(xiàn)在我把過(guò)程記錄下來(lái),方便后來(lái)的小伙伴遇到相同問(wèn)題的時(shí)候有解決的思路。當(dāng)然,也希望有更好的方法的小伙伴們提出更好的優(yōu)化方案。開(kāi)發(fā)工具:RT-Thread
    發(fā)表于 06-07 14:57

    單片機(jī)接口資料匯總

    單片機(jī)接口資料匯總
    發(fā)表于 11-22 15:14 ?90次下載

    CSU18M88_開(kāi)發(fā)包資源及文件匯總下載

    CSU18M88_開(kāi)發(fā)包資源及文件匯總下載
    發(fā)表于 05-17 10:16 ?75次下載

    通信協(xié)議及接口技術(shù)匯總綜述

    通信協(xié)議及接口技術(shù)匯總綜述
    發(fā)表于 06-16 10:31 ?89次下載

    ATA&USB接口資料匯總

    ATA&USB接口資料匯總
    發(fā)表于 06-24 09:54 ?3次下載

    小信號(hào)放大電路設(shè)計(jì)方案匯總

    小信號(hào)放大電路設(shè)計(jì)方案匯總
    發(fā)表于 09-14 15:01 ?139次下載

    MATLAB優(yōu)化算法匯總01

    MATLAB優(yōu)化算法匯總01
    發(fā)表于 10-08 10:57 ?0次下載

    MATLAB優(yōu)化算法匯總02

    MATLAB優(yōu)化算法匯總02
    發(fā)表于 10-08 10:59 ?0次下載

    MATLAB優(yōu)化算法匯總03

    MATLAB優(yōu)化算法匯總03
    發(fā)表于 10-08 11:01 ?0次下載

    18接口優(yōu)化方案匯總2

    之前工作中,遇到一個(gè)`504`超時(shí)問(wèn)題。原因是因?yàn)?b class='flag-5'>接口耗時(shí)過(guò)長(zhǎng),超過(guò)`nginx`配置的`10`秒。然后 真槍實(shí)彈搞了一次接口性能優(yōu)化,最后接口從`11.3s`降為`170ms`。本文
    的頭像 發(fā)表于 02-15 15:59 ?619次閱讀
    <b class='flag-5'>18</b><b class='flag-5'>種</b><b class='flag-5'>接口</b><b class='flag-5'>優(yōu)化</b><b class='flag-5'>方案</b><b class='flag-5'>匯總</b>2

    接口優(yōu)化的常見(jiàn)方案實(shí)戰(zhàn)總結(jié)

    針對(duì)老項(xiàng)目,去年做了許多降本增效的事情,其中發(fā)現(xiàn)最多的就是接口耗時(shí)過(guò)長(zhǎng)的問(wèn)題,就集中搞了一次接口性能優(yōu)化。本文將給小伙伴們分享一下接口優(yōu)化
    的頭像 發(fā)表于 03-06 09:22 ?524次閱讀