Redis 生產實戰 7×24:容量規劃、性能調優、故障演練與成本治理 40 條軍規

(一)寫在前面:為什么需要“軍規”
Redis 在測試環境跑得飛快,一到線上就“莫名其妙”抖動;大促前擴容 3 倍,成本卻翻 5 倍;一次主從切換,緩存雪崩導致下游 DB 被打掛;開發說“Redis 是緩存,丟點數據無所謂”,結果用戶下單重復扣款。
這些問題背后,是缺乏體系化的方法論。本文以“軍規”形式,總結 40 條血淚經驗,覆蓋容量、性能、高可用、成本、監控、演練、治理七大主題。

(二)容量規劃 6 條軍規
軍規 1:不要用“峰值 QPS × 平均 value 大小”估算內存。
真實公式:
memory = (key 總數 × (key 長度 + value 長度 + 56B 元數據)) × 1.3(碎片因子) + 復制 backlog + client 緩沖區 + AOF 重寫緩沖區。

軍規 2:提前 6 個月規劃 TTL。
業務方往往拍腦袋寫 86400s,結果 90% key 3 小時后就無訪問。TTL 減半,內存立省一半,但需評估擊穿風險。

軍規 3:冷熱分級。
把 30 天未訪問的 key 遷移到 SSD Redis 或 OSS,接口延遲從 1 ms 漲到 5 ms,但內存成本降 70%。

軍規 4:預分配集群槽位。
不要等 1000 個節點再擴容,提前按業務域分池,避免跨槽事務。

軍規 5:預留 20% 內存給復制與 AOF。
主從全量同步時,子進程瞬時內存翻倍,云主機 OOM Killer 會無情降臨。

軍規 6:定期跑 redis-cli --bigkeys。

10 KB 的 value 用 hash 拆分,>1 MB 的直接打回業務方。

(三)性能調優 8 條軍規
軍規 7:slowlog 閾值不要設 10 ms,請設 1 ms。
一次 Lua 腳本 50 ms,會拖慢整個事件循環。

軍規 8:避免 keys *、flushdb。
用 SCAN + pipeline,或者把命令改寫成 Lua。

軍規 9:監控 used_cpu_sys 與 used_cpu_user 比例。
比例 > 3 說明系統調用開銷大,檢查是否頻繁 fork、swap。

軍規 10:開啟 io-threads 前,先用 redis-benchmark 壓測。
單核 QPS 已 > 8 萬且 value > 4 KB 時才生效。

軍規 11:TLS 不是洪水猛獸。
在 AWS Nitro Enclaves 上,TLS 握手延遲 < 0.2 ms,CPU 消耗 < 5%,安全合規收益遠高于性能損耗。

軍規 12:關閉 THP。
Transparent Huge Page 會導致 30 ms 級延遲毛刺。

軍規 13:NUMA 綁核。
在多 socket 服務器上,把 Redis 綁到同一個 NUMA node,避免跨 node 訪存。

軍規 14:避免 swap。
vm.overcommit_memory=1,關閉 swap,或把 swapiness 調到 1。

(四)高可用與故障演練 10 條軍規
軍規 15:哨兵至少 3 節點,且跨機架。
兩節點“腦裂”時,業務永遠選錯主。

軍規 16:cluster-require-full-coverage=no。
當 1/16384 槽位異常時,集群仍可服務。

軍規 17:每月一次“機房斷電”演練。
用 iptables 隨機 drop 500 ms 包,模擬網絡抖動;用 tc 注入 200 ms 延遲,驗證客戶端重試策略。

軍規 18:故障演練前先跑 redis-check-aof 與 redis-check-rdb。
AOF 尾部寫壞時,可用 redis-check-aof --fix 截斷到最近合法命令。

軍規 19:配置 client-output-buffer-limit replica 256mb 64mb 60。
防止 replica 讀取慢導致 master 緩沖區堆積。

軍規 20:設置 min-replicas-to-write 1。
極端情況下,拒絕寫請求,保護數據。

軍規 21:使用 redis-cli --rdb 做異地冷備。
RDB 流式傳輸,無需停機。

軍規 22:Prometheus 采集間隔 5 s,不要 30 s。
故障窗口 30 s 足以讓熔斷失效。

軍規 23:告警分級。
P0:master 宕機;P1:replica 延遲 > 1 s;P2:used_memory > 85%。

軍規 24:灰度升級。
先在只讀實例升級,跑 24 h 無異常再升級主庫。

(五)成本治理 7 條軍規
軍規 25:開啟內存壓縮。
listpack + 32 位編碼,可省 40% 內存。

軍規 26:使用 Spot 實例跑 replica。
Spot 被回收時,自動提升其他 replica。

軍規 27:購買云上預留實例,不要按量。
3 年期預留比按量便宜 60%。

軍規 28:定期回收僵尸 key。
寫腳本掃描 TTL=-1 且 idle > 7 天的 key,發工單給業務 owner。

軍規 29:避免跨 AZ 流量費。
同地域多 AZ 部署,用 VPC Endpoint 走內網。

軍規 30:把日志壓縮后轉存 OSS。
AOF 重寫后 7 天自動打包 gzip,節省 90% 存儲。

軍規 31:按業務域拆分集群。
A 業務 20 G、B 業務 200 G,放一起會導致 A 被迫付 10 倍成本。

(六)監控與可觀測性 5 條軍規
軍規 32:用 redis_exporter + Grafana,而不是自己寫腳本。
社區已支持 200+ 指標,覆蓋 99% 場景。

軍規 33:關注 master_last_io_seconds_ago。
replica 延遲不是看 offset,而是看主從最后一次交互時間。

軍規 34:記錄 executed_commands_total。
突增 10 倍,可能是業務死循環或爬蟲。

軍規 35:用 keyspace_misses / (hits + misses) 計算命中率。
不要只看 info stats 的 keyspace_hits。

軍規 36:開啟 latency-monitor-threshold 100。
記錄 > 100 μs 的操作棧,方便火焰圖定位。

(七)客戶端與業務協同 4 條軍規
軍規 37:禁止 keys、monitor、flushall 命令。
用 ACL 屏蔽,或重命名為隨機字符串。

軍規 38:連接池大小 = (峰值 QPS × 平均 RTT) / (1 - 連接利用率)。
不要拍腦袋設 200。

軍規 39:重試策略必須帶 jitter。
固定 1 s 重試會導致 thundering herd。

軍規 40:重大活動前 2 周凍結 Redis 配置變更,并做壓測。
變更窗口不跨 0 點,方便回滾。

(八)結語
Redis 的門檻不在安裝,而在“如何不踩坑”。40 條軍規不是教條,而是“踩坑—復盤—固化”的循環產物。愿你在下一次故障來臨前,已把它們變成肌肉記憶。

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

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

相關文章

【DOCKER】綜合項目 MonitorHub (監控中心)

文章目錄1、項目架構圖1.1 架構組件2、實際實施2.1 安裝docker2.2 編寫dockerfile文件2.2.1 Prometheus2.2.2 node_exporter2.2.3 nginxvts模塊2.2.4 nginx_exporeter 服務發現文件2.2.5 maridb dockerfile文件2.2.6 鏡像總數2.3 具體操作2.3.1 Prometheus組件2.3.2 nginx組件2…

Java List 集合詳解:從基礎到實戰,掌握 Java 列表操作全貌

作為一名 Java 開發工程師&#xff0c;你一定在項目中頻繁使用過 List 集合。它是 Java 集合框架中最常用、最靈活的數據結構之一。無論是從數據庫查詢出的數據&#xff0c;還是前端傳遞的參數列表&#xff0c;List 都是處理這些數據的首選結構。本文將帶你全面掌握&#xff1a…

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言!

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01;算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如…

Oracle數據泵詳解——讓數據遷移像“點外賣”一樣簡單?

?今天我想和大家聊一個數據庫領域的“萬能搬運工”——Oracle數據泵&#xff08;Data Pump&#xff09;?。相信很多人都有過這樣的經歷&#xff1a;業務要上線新系統&#xff0c;得把舊庫的數據搬到新環境&#xff1b;或者領導突然要一份3年前的歷史數據&#xff0c;可不能影…

Leetcode 03 java

爬樓梯算法現在只看明白動態規劃&#xff0c;也沒有很難喲&#xff01;&#xff01;題目70. 爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f;java題解class Solution {public int climbStairs(…

怎么刪除 wps 的右鍵菜單

打開 WPS 點擊 WPS Office 選項卡&#xff0c;點擊右側全局配置》配置和修復工具點擊高級功能定制下的都可以關閉和隱藏點擊確定就可以了。

C++:list

一&#xff0c;list的介紹1&#xff0c;list初步&#xff08;1&#xff09;list是 C 標準模板庫 (STL) 中的一個雙向鏈表容器。它允許在常數時間內進行任意位置的插入和刪除操作&#xff0c;但不支持隨機訪問。&#xff08;2&#xff09;list容器的底層數據結構為帶頭雙向循環鏈…

深入理解Collections.addAll方法

文章目錄深入理解Collections.addAll方法概述方法定義基本用法1. 向List添加元素2. 向Set添加元素3. 添加數組元素與傳統add方法的比較使用傳統add方法使用Collections.addAll性能考慮注意事項實際應用場景與Collection.addAll的區別最佳實踐總結深入理解Collections.addAll方法…

CISP-PTE 練習題(完整一套)

目錄 1、SQL注入 2、文件上傳 3、文件包含 4、代碼審計 5、命令執行 6、端口掃描 7、sql 寫 webshell 8、3389 遠程桌面利用 1、SQL注入 sqllabs-less-24 二次注入 2、文件上傳 沒有對文件后綴進行檢測&#xff0c;但是對文件類型有檢測&#xff0c;需要使用圖片頭繞…

Vue3入門-計算屬性+監聽器

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;vscode\node.js &#x1f680;所屬專欄&#xff1a;Vue3 文章目錄1. 計算屬性1.1 computed函數1.2 計算屬性VS普通函數1.3 計算屬性的完整寫法2. 監聽器3.總結1. 計算屬性 計算屬性&#xff08;compu…

Linux Swap區深度解析:為何禁用?何時需要?

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、Swap區&#xff1a;Linux的"內存救生圈"二、為什么要禁用Swap&#xff1f;性能的隱形殺手三、何時應該使用Swap&#xff1f;不可或缺的場景四、如…

用TensorFlow進行邏輯回歸(三)

邏輯回歸Logistic regression這個腳本展示如何用TensorFlow求解邏輯回歸。 ()ysigmoid(Axb)我們使用低出生重量數據,特別地:y 0 or 1 low birth weightx demographic and medical history dataimport matplotlib.pyplot as pltimport numpy as npimport tensorflow as tfimp…

mingw 編譯 assimp v6.0.2 解決編譯報錯

mingw 編譯 assimp v6.0.2 理論上看這個就能滿足&#xff1a;在Windows下使用CMakeMinGW64編譯Assimp庫 環境變量問題 i386 architecture of input file CMakeFiles\assimp.dir/objects.a(assimp.rc.obj)’ is incompatible with i386:x86-64 output collect2.exe: error: ld r…

Windows 11清理C盤方法大全:磁盤清理/禁用休眠/系統還原點/優化大師使用教程

Windows 11清理C盤方法1. 使用磁盤清理工具步驟&#xff1a;按 Win S 搜索“磁盤清理”&#xff0c;打開工具。選擇C盤&#xff0c;點擊“確定”。勾選需要清理的文件類型&#xff08;如臨時文件、系統錯誤內存轉儲等&#xff09;&#xff0c;點擊“確定”。確認刪除操作&…

Rabbitmq Direct Exchange(直連交換機)多個消費者,配置相同的key ,隊列,可以保證只有一個消費者消費嗎

思考可以保證消費不被重復消費&#xff0c;因為通過輪詢一個消息只會投遞給一個消費者。但是不是一個消費者消費&#xff0c;而是多個輪詢消費在 RabbitMQ 中&#xff0c;如果多個消費者&#xff08;Consumers&#xff09;同時訂閱 同一個隊列&#xff08;Queue&#xff09;&am…

設計模式是什么呢?

1.掌握設計模式的層次第一層&#xff1a;剛剛學編程不久&#xff0c;聽說過什么是設計模式。第二層&#xff1a;有很長時間的編程經驗&#xff0c;自己寫過很多代碼&#xff0c;其中用到了設計模式&#xff0c;但是自己不知道。第三層&#xff1a;學習過設計模式&#xff0c;發…

ThreadLocal使用詳解-從源碼層面分析

從demo入手看效果 代碼Demostatic ThreadLocal tl1 new ThreadLocal();static ThreadLocal tl2 new ThreadLocal();static ThreadLocal tl3 new ThreadLocal();public static void main(String[] args) {tl1.set("123");tl2.set("456");tl3.set("4…

CPO:對比偏好優化—突破大型語言模型在機器翻譯中的性能邊界

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" CPO&#xff1a;對比偏好優化—突破大型語言模型在機器翻譯中的性能邊界 摘要 中等規模的大型語言模型&#xff08;LLMs&#xff09;&#xff0c;如參數量為 7B 或 13B 的模型&#xff0c;在機器翻譯&#xff0…

執行shell 腳本 如何將日志全部輸出到文件

在執行 Shell 腳本時&#xff0c;如果需要將 所有輸出&#xff08;包括標準輸出 stdout 和錯誤輸出 stderr&#xff09; 重定向到日志文件&#xff0c;可以使用以下方法&#xff1a;方法 1&#xff1a;直接重定向&#xff08;推薦&#xff09; /appdata/mysql_backup_dump.sh &…

Postman接口測試實現UI自動化測試

Selenium底層原理 3天精通Postman接口測試&#xff0c;全套項目實戰教程&#xff01;&#xff01;運行代碼&#xff0c;啟動瀏覽器后&#xff0c;webdriver會將瀏覽器綁定到特定的端口&#xff0c;作為webdriver的remote server&#xff08;遠程服務端&#xff09;&#xff0c;…