色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

18種接口優化方案匯總2

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

6. 事件回調思想:拒絕阻塞等待。

如果你調用一個系統B接口,但是它處理業務邏輯,耗時需要10s甚至更多。然后你是一直 阻塞等待,直到系統B的下游接口返回 ,再繼續你的下一步操作嗎?這樣 顯然不合理

我們參考 IO多路復用模型 。即我們不用阻塞等待系統B的接口,而是先去做別的操作。等系統B的接口處理完,通過事件回調通知,我們接口收到通知再進行對應的業務操作即可。

如果大家忘記了IO模型,可以復習一下我的文章:看一遍就理解:IO模型詳解

7. 遠程調用由串行改為并行

假設我們設計一個APP首頁的接口,它需要查用戶信息、需要查banner信息、需要查彈窗信息等等。如果是串行一個一個查,比如查用戶信息200ms,查banner信息100ms、查彈窗信息50ms,那一共就耗時350ms了,如果還查其他信息,那耗時就更大了。

圖片

其實我們可以改為并行調用,即查用戶信息、查banner信息、查彈窗信息,可以同時 并行發起

圖片

最后接口耗時將大大降低 。有些小伙伴說,不知道如何使用并行優化接口?

我之前寫過一篇文章并行優化接口的文章,保姆級別的!大家可以看一下,看完會有用的:后端思維篇,手把手教你寫一個并行調用模板

8. 鎖粒度避免過粗

在高并發場景,為了防止 超賣等情況 ,我們經常需要 加鎖來保護共享資源 。但是,如果加鎖的粒度過粗,是很影響接口性能的。

什么是加鎖粒度呢?

其實就是就是你要鎖住的范圍是多大。 比如你在家上衛生間,你只要鎖住衛生間就可以了吧 ,不需要將整個家都鎖起來不讓家人進門吧,衛生間就是你的加鎖粒度。

不管你是synchronized加鎖還是redis分布式鎖,只需要在共享臨界資源加鎖即可,不涉及共享資源的,就不必要加鎖。這就好像你上衛生間,不用把整個家都鎖住,鎖住衛生間門就可以了。

比如,在業務代碼中,有一個ArrayList因為涉及到多線程操作,所以需要加鎖操作,假設剛好又有一段比較耗時的操作(代碼中的slowNotShare方法)不涉及線程安全問題。 反例加鎖,就是一鍋端,全鎖住 :

//不涉及共享資源的慢方法
private void slowNotShare() {
    try {
        TimeUnit.MILLISECONDS.sleep(100);
    } catch (InterruptedException e) {
    }
}

//錯誤的加鎖方法
public int wrong() {
    long beginTime = System.currentTimeMillis();
    IntStream.rangeClosed(1, 10000).parallel().forEach(i -> {
        //加鎖粒度太粗了,slowNotShare其實不涉及共享資源
        synchronized (this) {
            slowNotShare();
            data.add(i);
        }
    });
    log.info("cosume time:{}", System.currentTimeMillis() - beginTime);
    return data.size();
}

正例:

public int right() {
    long beginTime = System.currentTimeMillis();
    IntStream.rangeClosed(1, 10000).parallel().forEach(i -> {
        slowNotShare();//可以不加鎖
        //只對List這部分加鎖
        synchronized (data) {
            data.add(i);
        }
    });
    log.info("cosume time:{}", System.currentTimeMillis() - beginTime);
    return data.size();
}

9. 切換存儲方式:文件中轉暫存數據

如果數據太大,落地數據庫實在是慢的話, 就可以考慮先用文件的方式暫存 。先保存文件,再異步 下載文件,慢慢保存到數據庫

這里可能會有點抽象,給大家分享一個,我之前的一個真實的優化案例吧。

之前開發了一個轉賬接口。如果是并發開啟,10個并發度,每個批次1000筆轉賬明細數據,數據庫插入會特別耗時, 大概6秒左右 ;這個跟我們公司的數據庫同步機制有關,并發情況下,因為優先保證同步,所以并行的插入變成串行啦,就很耗時。

優化前1000筆明細轉賬數據,先落地DB數據庫,返回處理中給用戶,再異步轉賬。如圖:

圖片

記得當時壓測的時候,高并發情況,這1000筆明細入庫,耗時都比較大。所以我轉換了一下思路, 把批量的明細轉賬記錄保存的文件服務器,然后記錄一筆轉賬總記錄到數據庫即可 。接著異步再把明細下載下來,進行轉賬和明細入庫。最后優化后,性能提升了 十幾倍

優化后 ,流程圖如下:

圖片

如果你的接口耗時瓶頸就 在數據庫插入操作這里 ,用來批量操作等,還是效果還不理想,就可以考慮用文件或者MQ等暫存。有時候批量數據放到文件,會比插入數據庫效率更高。

10. 索引

提到接口優化,很多小伙伴都會想到 添加索引 。沒錯, 添加索引是成本最小的優化 ,而且一般優化效果都很不錯。

索引優化這塊的話,一般從這幾個維度去思考:

  • 你的SQL加索引了沒?
  • 你的索引是否真的生效?
  • 你的索引建立是否合理?

10.1 SQL沒加索引

我們開發的時候,容易疏忽而忘記給SQL添加索引。所以我們在寫完SQL的時候,就順手查看一下 explain執行計劃。

explain select * from user_info where userId like '%123';

你也可以通過命令show create table ,整張表的索引情況。

show create table user_info;

如果某個表忘記添加某個索引,可以通過alter table add index命令添加索引

alter table user_info add index idx_name (name);

一般就是:SQLwhere條件的字段,或者是order by 、group by后面的字段需需要添加索引。

10.2 索引不生效

有時候,即使你添加了索引,但是索引會失效的。 田螺哥整理了索引失效的常見原因

圖片

10.3 索引設計不合理

我們的索引不是越多越好,需要合理設計。比如:

  • 刪除冗余和重復索引。
  • 索引一般不能超過5
  • 索引不適合建在有大量重復數據的字段上、如性別字段
  • 適當使用覆蓋索引
  • 如果需要使用force index強制走某個索引,那就需要思考你的索引設計是否真的合理了

11. 優化SQL

處了索引優化,其實SQL還有很多其他有優化的空間。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口優化
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1365
收藏 人收藏

    評論

    相關推薦

    電平轉換方案匯總

    電平轉換方案匯總
    發表于 04-05 22:18

    示波器探頭接口整理匯總

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

    分享一WLAN射頻優化的解決方案

    分享一WLAN射頻優化的解決方案
    發表于 05-24 06:29

    介紹一基于FIFO結構的優化端點設計方案

    本文介紹一基于FIFO結構的優化端點設計方案
    發表于 05-31 06:31

    分享一基于littlevgl2rtt軟件包的RGB屏幕接口優化方案

    StudioOS版本:4.0.3開發板:Art-Pi + 正點原子4.3寸RGB屏軟件包:Littlevgl2rtt(latest)溫馨提示:下面的優化方案是基于該軟件包的優化,如果
    發表于 06-07 14:57

    MSP430與I2C總線接口技術設計方案

    分析了MSP430 單片機I/O 端口的結構特點,提出了適合MSP430 特點的I2C 總線接口方案。該方案優化
    發表于 03-05 11:08 ?36次下載

    單片機接口資料匯總

    單片機接口資料匯總
    發表于 11-22 15:14 ?90次下載

    使用MSSP模塊進行I2C串行EEPROM與PIC18器件的接口設計

    使用MSSP模塊進行I2C串行EEPROM與PIC18器件的接口設計說明。
    發表于 05-11 10:23 ?11次下載

    通信協議及接口技術匯總綜述

    通信協議及接口技術匯總綜述
    發表于 06-16 10:31 ?90次下載

    ATA&USB接口資料匯總

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

    MATLAB優化算法匯總01

    MATLAB優化算法匯總01
    發表于 10-08 10:57 ?0次下載

    MATLAB優化算法匯總02

    MATLAB優化算法匯總02
    發表于 10-08 10:59 ?0次下載

    MATLAB優化算法匯總03

    MATLAB優化算法匯總03
    發表于 10-08 11:01 ?0次下載

    18接口優化方案匯總1

    之前工作中,遇到一個`504`超時問題。原因是因為接口耗時過長,超過`nginx`配置的`10`秒。然后 真槍實彈搞了一次接口性能優化,最后接口從`11.3s`降為`170ms`。本文
    的頭像 發表于 02-15 15:59 ?862次閱讀
    <b class='flag-5'>18</b><b class='flag-5'>種</b><b class='flag-5'>接口</b><b class='flag-5'>優化</b><b class='flag-5'>方案</b><b class='flag-5'>匯總</b>1

    接口優化的常見方案實戰總結

    針對老項目,去年做了許多降本增效的事情,其中發現最多的就是接口耗時過長的問題,就集中搞了一次接口性能優化。本文將給小伙伴們分享一下接口優化
    的頭像 發表于 03-06 09:22 ?583次閱讀
    主站蜘蛛池模板: 国产精品一区二区人妻无码| 国产午夜视频在永久在线观看| 国产成人啪精品视频免费网| 人妻体体内射精一区二区| 99久久免费国内精品| 毛片在线不卡| 97超碰在线视频 免费| 美女一级毛片免费不卡视频| 2020年国产理论| 免费xxx成年大片| asian4you裸模| 全是肉的高h短篇列车| 国产AV麻豆出品在线播放| 午夜福利免费体检区| 国产一区在线观看免费| 亚洲国产精品VA在线看黑人| 嗨嗨快播电影| 中文字幕日本一区| 欧美成 人 网 站 免费| 成年人在线视频免费观看| 歪歪漫画羞羞漫画国产| 含羞草传媒在线观看| 中文字幕在线视频观看| 啪啪漫画无遮挡全彩h同人| 国产精品久免费的黄网站| 亚洲欧美高清在线| 美女挑战50厘米长的黑人| 神马伦理不卡午夜电影| 国产精品人妻无码久久久蜜桃臀| 羞羞答答的免费视频在线观看| 极品少妇高潮啪啪AV无码| 在线观看亚洲免费人成网址| 蜜柚视频网在线观看免费| 大桥未久在线看| 亚洲精品久久久一区| 两个洞一起插哦!好刺激| 啊灬啊别停灬用力啊在线观看视频| 卫生间被教官做好爽HH视频| 九九热精品免费观看| china野外18:19| 性夜夜春夜夜爽AA片A|