Redis 熱 key 和大 key 問題小結
一、什么是 Redis 熱 key?
熱 key(Hot Key)定義:
在單位時間內被**頻繁訪問(讀/寫)**的 key,導致其訪問集中、壓力過大。
熱 key 常見表現(xiàn):
- QPS 極高(某 key 每秒被訪問幾萬次)
- 某業(yè)務高頻讀寫一個 key(如秒殺庫存、排行榜 top1)
- Redis 實例 CPU 異常,卻只服務一個 key
熱 key 的風險:
| 問題 | 說明 |
|---|---|
| 單點壓力過大 | 所有請求打到同一個 key 上 |
| 緩存擊穿 | 熱 key 過期瞬間,大量請求落到 DB |
| 主從復制延遲 | 熱 key 改變頻繁 → 主從同步數據猛增 |
| 節(jié)點不均衡(集群) | Redis Cluster 中 key 分布不均勻 |
熱 key 解決方案:
| 問題 | 說明 |
|---|---|
| 單點壓力過大 | 所有請求打到同一個 key 上 |
| 緩存擊穿 | 熱 key 過期瞬間,大量請求落到 DB |
| 主從復制延遲 | 熱 key 改變頻繁 → 主從同步數據猛增 |
| 節(jié)點不均衡(集群) | Redis Cluster 中 key 分布不均勻 |
二、什么是 Redis 大 key?
大 key(Big Key)定義:
指的是 value 太大(例如一個 Hash 內含幾百萬個 field,或一個 List 有 10 萬項以上)或**字符串體積超大(如幾 MB 圖片)**的 key。
大 key 的風險:
| 問題 | 說明 |
|---|---|
| ? 刪除阻塞 | DEL 大 key 時會阻塞 Redis 單線程 |
| ? 主從復制變慢 / 丟失 | 主節(jié)點傳送一個大 key → 復制延遲 |
| ? 造成 RDB / AOF 暴漲 | Dump 一次會卡死 |
| ? 影響單條命令性能 | 操作大 key 會變慢,例如 HGETALL |
大 key 識別方法:
使用
redis-cli --bigkeys命令掃描實例使用
redis-rdb-tools分析 RDB 文件通過慢查詢日志 + 監(jiān)控查看
HGETALL、LRANGE、SMEMBERS的大 key
大 key 解決方案:
| 方案 | 說明 |
|---|---|
| ? 拆分數據結構 | 如一個大 Hash 拆成多個小 Hash(按 ID) |
| ? 控制最大 field 數/元素數 | 控制單個結構體內成員 ≤ 10K |
| ? 禁用危險命令 | 比如關閉 KEYS, FLUSHALL, HGETALL |
| ? 延遲刪除 / 慢刪策略 | 例如將大 key 分批 UNLINK 刪除 |
| ? 限制最大 value 大小 | 字符串不要超過幾 KB,避免超過 MTU |
UNLINK vs DEL 的區(qū)別:
| 命令 | 說明 |
|---|---|
DEL | 立即刪除(阻塞線程) |
UNLINK | 異步刪除,非阻塞 ? |
? Redis 4.0+ 建議用 UNLINK 刪除大 key!
總結對比表
| 類型 | 觸發(fā)方式 | 風險 | 解決方案核心 |
|---|---|---|---|
| 熱 key | 高頻訪問同一個 key | CPU 飆升、擊穿、熱點 | 本地緩存、分片、限流、預熱 |
| 大 key | value 結構太大 | 慢查詢、阻塞、同步問題 | 拆分結構、異步刪除、結構約束、UNLINK |
到此這篇關于Redis 熱 key 和大 key 問題的文章就介紹到這了,更多相關Redis 熱 key 和大 key內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
redis持久化AOF和RDB的區(qū)別及解決各個場景問題示例
這篇文章主要為大家介紹了redis持久化AOF和RDB的區(qū)別及解決各個場景問題示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08

