Redis 性能瓶頸時如何處理?

當 Redis 遇到性能瓶頸時,需要從多個維度進行排查和優化。以下是系統化的解決方案,涵蓋硬件、配置、數據模型、網絡等關鍵點:


一、硬件資源優化

  1. 內存瓶頸

    • 現象:頻繁觸發 OOMused_memory 接近物理內存。
    • 解決
      • 升級服務器內存(如從 32GB 升級到 128GB)。
      • 啟用 Redis 6.0+ 的 maxmemory-policy 合理淘汰策略(如 allkeys-lru)。
      • 監控 used_memory_rssused_memory,避免內存碎片(超過 1.5 倍時需重啟或使用 MEMORY PURGE)。
  2. CPU 瓶頸

    • 現象used_cpu_sysused_cpu_user 持續高位,QPS 無法提升。
    • 解決
      • 升級 CPU(如從 4 核升級到 16 核)。
      • 啟用 Redis 6.0+ 的多線程 I/O(io-threads 4)。
      • 避免復雜命令(如 KEYS *SORT),改用 SCAN 或客戶端分片。
  3. 網絡瓶頸

    • 現象instantaneous_ops_per_sec 接近網卡帶寬(如千兆網卡理論峰值 125MB/s)。
    • 解決
      • 升級網卡(如萬兆網卡)。
      • 啟用壓縮(如 lzf 壓縮 RDB 文件)。
      • 使用連接池減少 TCP 握手開銷。

二、配置參數調優

  1. 持久化優化

    • RDB
      • 調整 save 策略(如 save 900 1 改為 save 3600 1 減少觸發頻率)。
      • 使用 bgrewriteaof 替代頻繁 bgsave
    • AOF
      • 啟用 aof-use-rdb-preamble yes(Redis 4.0+ 混合持久化)。
      • 調整 auto-aof-rewrite-percentageauto-aof-rewrite-min-size
  2. 內存分配器

    • 現象mem_allocator 使用 jemalloc 但仍有碎片。
    • 解決
      • 編譯時指定 MALLOC=libcMALLOC=tcmalloc(需測試性能差異)。
      • 定期重啟 Redis 清理碎片(生產環境需謹慎)。
  3. 超時與重試

    • 設置 timeout 0(默認不超時),但需監控慢查詢(slowlog-log-slower-than 10000)。
    • 客戶端啟用重試機制(如 Jedis 的 retryAttempts)。

三、數據模型與訪問模式優化

  1. 減少大鍵(Big Key)

    • 現象MEMORY USAGE key 返回值超過 10KB。
    • 解決
      • 拆分大鍵(如將 Hash 拆分為多個小 Hash)。
      • 使用 HSCAN 替代 HGETALL
  2. 熱點鍵(Hot Key)

    • 現象INFO keyspace 中某些鍵的訪問量遠高于其他鍵。
    • 解決
      • 使用本地緩存(如 Guava Cache)減少 Redis 訪問。
      • 將熱點鍵遷移到獨立 Redis 實例(如分片集群)。
  3. 批量操作

    • 使用 MGET/MSET 替代多次 GET/SET
    • 使用 Pipeline 減少 RTT(如 redis-cli --pipe 導入數據)。

四、架構擴展方案

  1. 讀寫分離

    • 適用場景:讀多寫少(如 10:1)。
    • 實現
      • 主節點寫,從節點讀(replicaof)。
      • 客戶端路由(如 Spring Data Redis 的 ReadFrom 策略)。
  2. 分片集群

    • 適用場景:單實例內存或 QPS 達到上限。
    • 方案
      • Redis Cluster(自動分片,支持 16384 個槽)。
      • Twemproxy/Codis(需手動管理分片)。
  3. 緩存穿透/雪崩/擊穿防護

    • 穿透:空值緩存(如 SET key "" EX 60)。
    • 雪崩:隨機過期時間(如 EX rand(60,120))。
    • 擊穿:互斥鎖(如 SETNX 鎖 + 雙重檢查)。

五、監控與診斷工具

  1. 實時監控

    • INFO 命令:關注 instantaneous_ops_per_secused_memorykeyspace_hits
    • MONITOR 命令(生產環境慎用,影響性能)。
    • Prometheus + Grafana:監控 redis_commands_processed_total 等指標。
  2. 慢查詢分析

    • SLOWLOG GET 10 查看最近 10 條慢查詢。
    • 優化慢查詢(如將 HGETALL 改為 HSCAN)。
  3. 性能測試

    • redis-benchmark -n 100000 -c 50 模擬高并發。
    • 使用 memtier_benchmark 測試混合讀寫場景。

六、案例:從單實例到集群的遷移

  1. 問題:單實例 Redis 內存 80GB,QPS 5 萬,但寫入延遲超過 50ms。
  2. 優化步驟
    • 啟用多線程 I/O(io-threads 4),延遲降至 30ms。
    • 遷移到 Redis Cluster(3 主 3 從),QPS 提升至 15 萬,延遲穩定在 10ms。
    • 熱點鍵拆分到獨立實例,延遲進一步降至 5ms。

總結

Redis 性能瓶頸的解決需結合 硬件升級、配置調優、數據模型優化、架構擴展 四方面。建議優先通過監控定位瓶頸點(如 INFOSLOWLOG),再針對性優化。對于高并發場景,分片集群是最終解決方案,但需權衡運維復雜度。

我正在程序員刷題神器面試鴨上高效準備面試,9000+ 高頻面試真題、800 萬字優質題解,覆蓋主流編程方向,跟我一起刷原題、過面試:
點擊進入

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

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

相關文章

多相機三維人臉掃描儀:超寫實數字人模型制作“加速器”

超寫實數字人,又稱“數字分身”,是以真人形象為原型構建的高仿真虛擬形象,按維度可分為2D數字人與3D數字人。這類數字人已廣泛應用于影視制作、游戲交互、品牌直播等場景,其核心價值在于通過技術手段實現真人形象的數字化復刻&…

ceph 自動調整 pg_num

要讓 Ceph 的 pool 自動調整 pg_num(PG 數量),你需要啟用 PG autoscaler。這是從 Ceph Octopus(15.x) 開始引入的功能,能根據池的容量和對象數量自動建議或調整 pg_num,以實現負載均衡。 ? 一步步開啟 Pool 的 pg_num 自動調整 1. 啟用 PG autoscaler 模塊(通常默認啟…

Python Beautiful Soup 4【HTML/XML解析庫】 簡介

全面剖析大模型 圖解大模型:生成式AI原理與實戰 大語言模型大模型應用開發Transformer DeepSeek模型原理開發深度學習 圖靈出品 大模型強化學習詳解 大模型算法:強化學習、微調與對齊(全彩)詳解強化學習 RLHF GRPO DPO SFT CoT D…

AI Agent開發與安全

AI Agent的核心演進 Level 1:LLM Agent(聊天機器人) 特點:靠提示詞工程賦予人設(如星座占卜、角色扮演),但存在幻覺問題,輸出不可控。局限:娛樂性強,難勝任嚴…

NumPy玩轉數據科學

本文在創作過程中借助 AI 工具輔助資料整理與內容優化。圖片來源網絡。 文章目錄 一、引言二、NumPy 概述2.1 NumPy 的定義與發展2.2 NumPy 的重要性 三、NumPy 的多維數組支持3.1 多維數組的概念3.2 多維數組的創建與操作3.2.1 數組的創建3.2.2 數組的索引和切片3.2.3 數組的運…

【uniapp小程序開發】圖表組件ucharts的使用(入門)

一、插件的安裝 安裝非常簡單,打開uniapp的插件市場,導入到項目中即可 下載地址:https://ext.dcloud.net.cn/plugin?id271 二、開始實踐 先看頁面的效果 頁面中實現了三個基本圖形的展示:折線圖、餅圖和柱狀圖。 上圖左一&a…

APISIX+etcd高可用集群部署方案詳解

#作者:任少近 文章目錄 一、背景二、部署etcd1、etcd的svc部署yaml2、Etcd 服務定義說明3、etcd的statefulset部署yaml4、Etcd 狀態集(StatefulSet)配置說明5、查看集群狀態 三、部署apisix的deployment部署1、apisix部署yaml文件2、APISIX …

Excel常用公式大全

資源寶整理分享:https://www.httple.net Excel常用公式大全可以幫助用戶提高工作效率,掌握常用的Excel公式,讓數據處理和計算工作更加便捷高效。了解公式學習方法、用途,不再死記硬背,拒絕漫無目的。 命令用途注釋說…

什么是Seata?

深入解析Seata:分布式事務的終極解決方案 什么是Seata? Seata(Simple Extensible Autonomous Transaction Architecture)是一款開源的分布式事務解決方案,由阿里巴巴中間件團隊于2019年1月發起并開源(最初…

【系統規劃與管理師第二版】1.3 新一代信息技術及發展

一、物聯網 物聯網(IoT)是指通過信息傳感設備,按約定的協議將任何物品與互聯網相連接,進行信息交換和通信,以實現智能化識別、定位、跟蹤、監控和管理的網絡。物聯網主要解決物品與物品(T2T)、人…

在Spring Boot中自定義JSON返回日期格式的指南

在開發Spring Boot應用時,很多時候需要在返回的JSON數據中以特定格式顯示日期和時間。例如,使用LocalDateTime、Date等類型的字段時,默認的序列化格式可能不是你期望的路徑。本文將介紹如何在Spring Boot中實現控制返回JSON數據的日期格式&am…

【大數據高并發核心場景實戰】 - 數據持久化之冷熱分離

大數據高并發核心場景實戰 - 數據持久化之冷熱分離 當云計算平臺的業務后臺處理工單突然接入客服系統的請求洪流,每日新增10萬工單,3000萬主表1.5億明細表的數據庫開始呻吟——是時候請出「冷熱分離」這劑退燒藥了! 一、業務場景:…

【AI Study】第四天,Pandas(6)- 性能優化

文章概要 本文詳細介紹 Pandas 的性能優化技術,包括: 內存優化計算優化大數據處理實際應用示例 內存優化 數據類型優化 # 查看數據類型 df.dtypes# 查看內存使用情況 df.memory_usage(deepTrue)# 優化數值類型 # 將 float64 轉換為 float32 df[floa…

c++系列之智能指針的使用

💗 💗 博客:小怡同學 💗 💗 個人簡介:編程小萌新 💗 💗 如果博客對大家有用的話,請點贊關注再收藏 🌞 智能指針的使用及原理 AII(Resource Acquisition Is Initializatio…

知識蒸餾(Knowledge Distillation, KD)

知識蒸餾(Knowledge Distillation, KD)是一種模型壓縮與知識遷移技術,通過讓小型學生模型(Student)模仿大型教師模型(Teacher)的行為(如輸出概率分布或中間特征表示)&…

chatGPT 會擴大失業潮嗎?

擊上方關注 “終端研發部” 設為“星標”,和你一起掌握更多數據庫知識 對于部分人而言,失業是必然趨勢。 這不,身后的一測試大哥,自從公司解散之后,已經在家待業半年了。。。 自打OpenAI推出了chatGPT3.0之后&#xff…

FPGA基礎 -- Verilog行為級建模之時序控制

Verilog 行為級建模(Behavioral Modeling)中“時序控制”機制的系統化由淺入深培訓內容,適用于初學者到進階 FPGA 設計工程師的學習路徑。 🎯 一、行為級建模的定位 行為級建模(Behavioral Modeling)是 Ve…

設計模式精講 Day 7:橋接模式(Bridge Pattern)

【設計模式精講 Day 7】橋接模式(Bridge Pattern) 文章簡述 在軟件系統中,類的繼承關系往往會導致類爆炸,尤其是在需要組合多種功能或行為時。橋接模式(Bridge Pattern)通過將抽象部分與其實現部分分離&am…

Apipost 簽約銳捷網絡:AI賦能,共推 ICT 領域 API 生態智能化升級

日前,北京北極狐信息科技有限公司(簡稱 “北極狐科技”)與銳捷網絡股份有限公司(簡稱 “銳捷網絡”)正式簽署合作協議,雙方將聚焦 ICT 基礎設施及解決方案領域,圍繞 API 全鏈路管理與智能化研發…