Redis 慢查詢分析與優化

Redis 慢查詢分析與優化

參考書籍 : https://weread.qq.com/web/reader/d5432be0813ab98b6g0133f5kd8232f00235d82c8d161fb2

以下從配置參數耗時細分分析工具優化策略四個維度深入解析 Redis 慢查詢問題,結合實戰調優建議,幫助開發者精準定位并優化性能瓶頸。


一、慢查詢核心配置參數

image

Redis 慢查詢功能通過兩個關鍵參數控制,直接影響日志記錄范圍和存儲容量:

  1. ?slowlog-log-slower-than?

    • 功能:設定命令執行時間的閾值(單位:微秒),超過此值的命令會被記錄。

    • 默認值:10000 微秒(10 毫秒),建議高并發場景調整為 1000 微秒(1 毫秒)

    • 特殊值

      • ?0?:記錄所有命令(調試用)。
      • 負值:禁用慢查詢日志。
  2. ??slowlog-max-len?

    • 功能:定義慢查詢日志列表的最大長度(先進先出隊列)。
    • 默認值:128 條,生產環境建議調至 1000 條以上,避免關鍵日志被覆蓋。

配置示例

# 動態設置(臨時生效)  
CONFIG SET slowlog-log-slower-than 1000  
CONFIG SET slowlog-max-len 1000  # 持久化到配置文件(需重啟)  
slowlog-log-slower-than 1000  
slowlog-max-len 1000  

二、耗時細分與瓶頸定位

Redis 命令執行全流程耗時可拆分為以下階段:

  1. 網絡傳輸(客戶端到服務端):

    • 網絡延遲或丟包可能導致客戶端感知的耗時增加,但不記錄在慢查詢日志中
    • 排查工具:ping?、traceroute? 或監控工具(如 Prometheus)。
  2. 命令排隊(Redis 內部隊列):

    • 單線程架構下,若并發請求過高,命令需排隊等待執行。
    • 排隊時間不納入慢查詢統計,但可能導致客戶端超時。
  3. 命令執行(核心耗時):

    • 實際執行命令的耗時,由慢查詢日志的 duration? 字段記錄(單位:微秒)。
    • 高復雜度命令(如 KEYS?、SORT?)或 BigKey 操作是主要瓶頸。
  4. 結果返回(服務端到客戶端):

    • 網絡傳輸時間同樣不計入慢查詢日志,但可能影響客戶端體驗。

三、慢查詢分析工具
  1. 內置命令

    • **SLOWLOG GET [n]?**:獲取最近 n 條慢查詢日志,含時間戳、耗時、具體命令。

      image

      127.0.0.1:6379> SLOWLOG GET 2  
      1) 1) (integer) 12345         # 日志ID  2) (integer) 1680000000    # 時間戳  3) (integer) 15000         # 耗時(微秒)  4) 1) "SORT"               # 命令及參數  2) "mylist"  
      
    • **SLOWLOG LEN?**:查看當前慢查詢日志數量。

    • **SLOWLOG RESET?**:清空日志列表。

  2. 監控工具

    • **INFO COMMANDSTATS?**:統計所有命令的執行次數和總耗時,定位高頻耗時命令。

      image

      參數介紹:

      截圖中每一項均以 cmdstat_<命令名>? 開頭,代表對應 Redis 命令的執行統計信息,各參數含義如下:

      參數名含義
      ?calls?該命令的總執行次數。
      ?usec?該命令所有執行耗時的總和(單位:微秒,μs)。
      ?usec_per_call?該命令的平均執行時間(單位:微秒,μs),即 usec ÷ calls?。
      ?rejected_calls?該命令被拒絕執行的次數(如權限不足、命令被禁用等情況)。
      ?failed_calls?該命令執行過程中失敗的次數(如參數錯誤、執行邏輯異常等)。

      cmdstat_ttl:calls=304,usec=3064,usec_per_call=10.08,rejected_calls=1,failed_calls=0? 為例:

      • ?TTL? 命令共執行 304? 次,總耗時 3064? 微秒,平均每次耗時 10.08? 微秒,被拒絕執行 1? 次,執行失敗 0? 次。

      其他項(如 cmdstat_auth?、cmdstat_set? 等)均遵循此格式,分別對應各自命令的統計數據,可據此分析命令的執行頻率、性能及異常情況。

    • **MONITOR?**:實時捕獲所有命令(慎用,可能引發性能問題)。

    • 第三方工具:Prometheus + Grafana 實現可視化監控。 后續研究


四、優化策略與實戰建議
  1. 規避高復雜度命令

    • 替代方案

      • SCAN? 代替 KEYS? 遍歷鍵。
      • 客戶端實現排序,避免 SORT? 命令處理大數據集。
    • 分頁處理:對大型集合使用 LRANGE? 分批次獲取數據。

  2. BigKey 治理

    • 拆分存儲:將大 Hash/List 拆分為多個子鍵(如 user:1001:logs_part1?)。

    • 漸進式刪除:通過 Lua 腳本分批次刪除 BigKey,避免阻塞。

      -- 分批次刪除大列表  
      local key = KEYS[1]  
      for i = 1, 1000 do  redis.call("LPOP", key)  
      end  
      
  3. 配置調優

    • 內存管理:設置 maxmemory? 和淘汰策略(如 allkeys-lru?)。
    • 集群分片:使用 Redis Cluster 分散負載,緩解單節點壓力。

五、調優最佳實踐
  1. 定期日志分析

    • 每日檢查慢查詢日志,識別高頻耗時命令。
    • 結合 INFO COMMANDSTATS? 驗證優化效果。
  2. 閾值動態調整

    • 業務高峰期臨時降低 slowlog-log-slower-than?(如 500 微秒),捕捉潛在問題。
  3. 日志持久化

    • 定期將慢查詢日志導出到外部存儲(如 Elasticsearch),便于長期分析。

總結

通過合理配置 slowlog-log-slower-than? 和 slowlog-max-len?,結合 SLOWLOG GET? 和監控工具,可精準定位 Redis 性能瓶頸。優化核心在于規避高復雜度命令、治理 BigKey、動態調整配置及利用集群技術。定期分析日志與監控數據,是保障 Redis 高性能運行的關鍵。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902325.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI之pdf解析:Tesseract、PaddleOCR、RapidPaddle(可能為 RapidOCR)和 plumberpdf 的對比分析及使用建議

目錄標題 Tesseract、PaddleOCR、RapidPaddle&#xff08;可能為 RapidOCR&#xff09;和 plumberpdf 的對比分析1. Tesseract類型: 開源 OCR 引擎特點:缺點:適用場景: 2. PaddleOCR (推薦)類型:特點:缺點:適用場景: 復雜版式文檔、多語言混合文本、需要高精度識別的場景&#…

算法 | 成長優化算法(Growth Optimizer,GO)原理,公式,應用,算法改進研究綜述,matlab代碼

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 成長優化算法 一、算法原理二、核心公式三、應用領域四、算法改進研究五…

網絡原理(TCP協議—協議格式,性質(上),狀態)

目錄 1.TCP協議段格式。 2.TCP協議傳輸時候的性質。 2.1確認應答。 2.2超時重傳。 2.3連接管理。 2.3.1 三次握手。 2.3.2四次揮手。 3.TCP常見的狀態。 1.TCP協議段格式。 TCP協議段是由首部和數據兩部分構成的。首部包含了TCP通信所需要的各種控制信息&#xff0c;而…

XAML 標記擴展

# XAML 標記擴展詳解 標記擴展(Markup Extensions)是XAML中一種特殊的語法結構&#xff0c;允許在XAML屬性中嵌入動態值或引用&#xff0c;而不是簡單的靜態值。它們使用花括號{}作為標識&#xff0c;是XAML強大功能的核心組成部分。 ## 基本語法結構 所有標記擴展都遵循以下…

DeepSeek+Cursor+Devbox+Sealos項目實戰

黑馬程序員DeepSeekCursorDevboxSealos帶你零代碼搞定實戰項目開發部署視頻教程&#xff0c;基于AI完成項目的設計、開發、測試、聯調、部署全流程 原視頻地址視頻選的項目非常基礎&#xff0c;基本就是過了個web開發流程&#xff0c;但我在實際跟著操作時&#xff0c;ai依然會…

Ethan獨立開發產品日報 | 2025-04-20

1. Checklist GG 基于人工智能的清單管理工具 checklist.gg是一個基于人工智能的清單管理工具&#xff0c;旨在幫助組織確保每次都能正確完成任務。 關鍵詞&#xff1a;AI驅動, 檢查清單, 管理工具, 任務管理, 效率提升, 組織管理, 工作流程, 自動化工具, 清單管理, 協作工具…

第十四屆藍橋杯 2023 C/C++組 冶煉金屬

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 核心思路&#xff1a; 思路詳解&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 藍橋云課 冶煉金屬 洛谷 P92…

【數字圖像處理】彩色圖像處理(1)

研究彩色圖像處理的原因 1&#xff1a;利用顏色信息&#xff0c;可以簡化目標物的區分&#xff0c;以及從場景中提取出目標物 2&#xff1a;人眼對顏色非常敏感&#xff0c;可以分辨出來幾千種顏色色調和亮度&#xff0c;卻只能分別出幾十種灰度 彩色圖像分類 偽彩色圖像處理&…

pytest自動化中關于使用fixture是否影響用例的獨立性

第一個問題&#xff1a;難道使用fixture 會影響用例獨立嗎&#xff1f; ? 簡單回答&#xff1a; 使用 fixture ≠ 不獨立。 只要你的 fixture 是每次測試都能自己運行、自己產生數據的&#xff0c;那么測試用例依然是“邏輯獨立”的。 ? 怎么判斷 fixture 是否影響獨立性&a…

C++計算 n! 中末尾零的數量

* 詳細說明* 給定一個整數作為輸入。目標是找出該數的階乘結果中末尾零的數量。 一個數 N 的階乘是范圍 [1, N] 內所有數的乘積。* * 我們知道&#xff0c;只有當一個數是 10 的倍數或者有因數對 (2, 5) 時&#xff0c;才會產生末尾零。 在任何大于 5 的數的階乘中&#xff0c;…

推薦系統/業務,相關知識/概念2

一、漫畫庫更新大量新作品&#xff0c;如何融入推薦系統&#xff1f; 參考答案&#xff1a; 快速提取新作品特征&#xff1a;除基礎屬性外&#xff0c;利用自然語言處理技術提取漫畫簡介關鍵詞等豐富特征向量&#xff0c;分析情節、角色設定等深層次特征結合物品畫像體系分類…

# 手寫數字識別:使用PyTorch構建MNIST分類器

手寫數字識別&#xff1a;使用PyTorch構建MNIST分類器 在這篇文章中&#xff0c;我將引導你通過使用PyTorch框架構建一個簡單的神經網絡模型&#xff0c;用于識別MNIST數據集中的手寫數字。MNIST數據集是一個經典的機器學習數據集&#xff0c;包含了60,000張訓練圖像和10,000張…

強化學習筆記(三)——表格型方法(蒙特卡洛、時序差分)

強化學習筆記&#xff08;三&#xff09;——表格型方法&#xff08;蒙特卡洛、時序差分&#xff09; 一、馬爾可夫決策過程二、Q表格三、免模型預測1. 蒙特卡洛策略評估1) 動態規劃方法和蒙特卡洛方法的差異 2. 時序差分2.1 時序差分誤差2.2 時序差分方法的推廣 3. 自舉與采樣…

c++_csp-j算法 (4)

迪克斯特拉() 介紹 迪克斯特拉算法(Dijkstra算法)是一種用于解決單源最短路徑問題的經典算法,由荷蘭計算機科學家艾茲赫爾迪克斯特拉(Edsger W. Dijkstra)于1956年提出。迪克斯特拉算法的基本思想是通過逐步擴展已經找到的最短路徑集合,逐步更新節點到源節點的最短路…

(13)VTK C++開發示例 --- 透視變換

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;VTK開發 &#x1f448; 1. 概述 在VTK&#xff08;Visualization Toolkit&#xff09;中&#xff0c;vtkPerspectiveTransform 和 vtkTransform 都是…

深入探索Qt異步編程--從信號槽到Future

概述 在現代軟件開發中,應用程序的響應速度和用戶體驗是至關重要的。尤其是在圖形用戶界面(GUI)應用中,長時間運行的任務如果直接在主線程執行會導致界面凍結,嚴重影響用戶體驗。 Qt提供了一系列工具和技術來幫助開發者實現異步編程,從而避免這些問題。本文將深入探討Qt…

基于Python的圖片/簽名轉CAD小工具開發方案

基于Python的圖片/簽名轉CAD工具開發方案 一、項目背景 傳統設計流程中&#xff0c;設計師常常需要將手寫簽名或掃描圖紙轉換為CAD格式。本文介紹如何利用Python快速開發圖像矢量化工具&#xff0c;實現&#xff1a; &#x1f4f7; 圖像自動預處理?? 輪廓精確提取?? 參數…

【倉頡 + 鴻蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架&#xff1a;使用華為倉頡編程語言編寫&#xff0c;專門用于開發AI Agent&#xff0c;支持鴻蒙、Windows、macOS、Linux等系統。 這篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位陣列天線中的真時延

本文要點 真時延是寬帶帶相位陣列天線的關鍵元素之一。 真時延透過在整個信號頻譜上應用可變相移來消除波束斜視現象。 在相位陣列中使用時延單元或電路板&#xff0c;以提供波束控制和相移。 市場越來越需要更快、更可靠的通訊網絡&#xff0c;而寬帶通信系統正在努力滿…

Java中 關于編譯(Compilation)、類加載(Class Loading) 和 運行(Execution)的詳細區別解析

以下是Java中 編譯&#xff08;Compilation&#xff09;、類加載&#xff08;Class Loading&#xff09; 和 運行&#xff08;Execution&#xff09; 的詳細區別解析&#xff1a; 1. 編譯&#xff08;Compilation&#xff09; 定義 將Java源代碼&#xff08;.java文件&#x…