接口性能優化需從查詢效率、請求處理、資源利用等多維度入手,結合用户管理模塊的業務場景,可通過以下具體策略提升性能:

一、查詢接口(/api/sys/user/list)優化

  1. 數據庫層優化

    • 索引優化:為“姓名”“登錄賬號”等檢索字段建立聯合索引或單獨索引,避免模糊查詢時的全表掃描(如LIKE '%關鍵詞%'可結合覆蓋索引優化);對分頁字段(如id或創建時間)建立索引,加速分頁查詢。
    • 分頁優化:使用LIMIT + 偏移量時,若數據量過大可改為“遊標分頁”(通過上一頁最後一條數據的id/時間戳作為條件),避免數據庫深層分頁的性能損耗;限制最大分頁條數(如最多支持100頁),防止惡意請求拖垮數據庫。
    • 避免全量查詢:即使無檢索條件,也強制返回分頁數據(而非全量),減少數據傳輸量;若需展示總數,可通過異步統計或緩存總數避免每次查詢都執行COUNT(*)
  2. 緩存優化

    • 熱點數據緩存:對高頻查詢條件(如“姓名模糊匹配”的熱門關鍵詞)的結果緩存至Redis,設置合理過期時間(如5分鐘),避免重複查詢數據庫。
    • 緩存分頁數據:緩存分頁結果(如key=user_list_{pageNum}_{pageSize}_{條件哈希}),相同請求直接返回緩存數據。
  3. 請求處理優化

    • 參數校驗前置:在網關層或接口入口校驗檢索參數合法性(如字符長度、格式),避免無效請求進入數據庫層。
    • 異步處理:若需關聯查詢用户角色、組織等信息,可通過異步線程池並行查詢,減少接口響應時間。

二、新增/編輯接口(/api/sys/user/save、/api/sys/user/update)優化

  1. 數據庫層優化

    • 批量操作:若新增/編輯時需關聯保存角色、組織關係,採用批量插入/更新(如MyBatis的foreach批量操作),減少數據庫IO次數。
    • 事務優化:縮小事務範圍,僅在核心數據寫入(用户表+關聯表)時開啓事務,避免無關操作佔用事務資源;使用數據庫連接池併合理配置參數(如最大連接數、空閒超時)。
  2. 校驗邏輯優化

    • 緩存校驗數據:校驗“用户姓名/登錄賬號唯一性”時,先查詢緩存(如Redis的Set結構存儲已存在的賬號),緩存未命中再查數據庫,減少數據庫查詢壓力。
    • 異步校驗非核心規則:非必填字段的格式校驗(如郵箱、性別)可異步處理,優先完成核心字段校驗與數據寫入,提升接口響應速度。
  3. 請求體優化

    • 字段精簡:僅接收必要字段(如區分必填/可選字段),避免傳輸冗餘數據;使用JSON輕量化序列化(如FastJSON),減少序列化/反序列化耗時。

三、刪除接口(/api/sys/user/delete/{userId})優化

  1. 數據庫層優化

    • 索引優化:為userId建立主鍵索引(默認已存在),確保根據主鍵刪除的效率;若需校驗用户關聯數據(如是否綁定角色),為關聯字段建立索引(如user_role表的userId索引)。
    • 軟刪除替代物理刪除:若業務允許,採用“軟刪除”(新增is_deleted字段標記),避免物理刪除帶來的數據碎片與事務開銷;通過定時任務異步清理軟刪除數據。
  2. 併發控制

    • 分佈式鎖:若存在併發刪除同一用户的場景,通過Redis分佈式鎖防止重複操作;或利用數據庫樂觀鎖(如version字段)控制併發。
  3. 前置校驗優化

    • 緩存關聯數據:校驗“用户是否關聯其他數據”時,優先查詢緩存中的關聯關係(如Redis的Hash存儲用户-角色映射),減少數據庫查詢。

四、通用優化策略

  1. 接口限流與熔斷

    • 對接口設置限流閾值(如每秒100次請求),防止突發流量壓垮服務;使用Sentinel/Hystrix實現熔斷降級,接口異常時返回預設兜底數據(如“服務繁忙,請稍後重試”)。
  2. 網絡與服務器優化

    • 使用HTTP/2協議減少TCP連接開銷;開啓GZIP壓縮請求/響應數據,降低傳輸體積。
    • 服務器資源擴容:根據接口壓力配置合理的CPU、內存,或採用集羣部署(如Nginx負載均衡)分散請求壓力。
  3. 監控與調優

    • 接入APM工具(如SkyWalking、Pinpoint)監控接口響應時間、數據庫慢查詢,定位性能瓶頸;定期分析慢查詢日誌,優化SQL語句(如避免SELECT *、減少子查詢)。

通過以上策略,可從數據存儲、請求處理、資源利用等層面全面提升接口性能,保障高併發場景下的穩定性與響應速度。