Redis 熱 key 和大 key 問題小結(jié)
一、什么是 Redis 熱 key?
熱 key(Hot Key)定義:
在單位時(shí)間內(nèi)被**頻繁訪問(讀/寫)**的 key,導(dǎo)致其訪問集中、壓力過大。
熱 key 常見表現(xiàn):
- QPS 極高(某 key 每秒被訪問幾萬(wàn)次)
- 某業(yè)務(wù)高頻讀寫一個(gè) key(如秒殺庫(kù)存、排行榜 top1)
- Redis 實(shí)例 CPU 異常,卻只服務(wù)一個(gè) key
熱 key 的風(fēng)險(xiǎn):
| 問題 | 說明 |
|---|---|
| 單點(diǎn)壓力過大 | 所有請(qǐng)求打到同一個(gè) key 上 |
| 緩存擊穿 | 熱 key 過期瞬間,大量請(qǐng)求落到 DB |
| 主從復(fù)制延遲 | 熱 key 改變頻繁 → 主從同步數(shù)據(jù)猛增 |
| 節(jié)點(diǎn)不均衡(集群) | Redis Cluster 中 key 分布不均勻 |
熱 key 解決方案:
| 問題 | 說明 |
|---|---|
| 單點(diǎn)壓力過大 | 所有請(qǐng)求打到同一個(gè) key 上 |
| 緩存擊穿 | 熱 key 過期瞬間,大量請(qǐng)求落到 DB |
| 主從復(fù)制延遲 | 熱 key 改變頻繁 → 主從同步數(shù)據(jù)猛增 |
| 節(jié)點(diǎn)不均衡(集群) | Redis Cluster 中 key 分布不均勻 |
二、什么是 Redis 大 key?
大 key(Big Key)定義:
指的是 value 太大(例如一個(gè) Hash 內(nèi)含幾百萬(wàn)個(gè) field,或一個(gè) List 有 10 萬(wàn)項(xiàng)以上)或**字符串體積超大(如幾 MB 圖片)**的 key。
大 key 的風(fēng)險(xiǎn):
| 問題 | 說明 |
|---|---|
| ? 刪除阻塞 | DEL 大 key 時(shí)會(huì)阻塞 Redis 單線程 |
| ? 主從復(fù)制變慢 / 丟失 | 主節(jié)點(diǎn)傳送一個(gè)大 key → 復(fù)制延遲 |
| ? 造成 RDB / AOF 暴漲 | Dump 一次會(huì)卡死 |
| ? 影響單條命令性能 | 操作大 key 會(huì)變慢,例如 HGETALL |
大 key 識(shí)別方法:
使用
redis-cli --bigkeys命令掃描實(shí)例使用
redis-rdb-tools分析 RDB 文件通過慢查詢?nèi)罩?+ 監(jiān)控查看
HGETALL、LRANGE、SMEMBERS的大 key
大 key 解決方案:
| 方案 | 說明 |
|---|---|
| ? 拆分?jǐn)?shù)據(jù)結(jié)構(gòu) | 如一個(gè)大 Hash 拆成多個(gè)小 Hash(按 ID) |
| ? 控制最大 field 數(shù)/元素?cái)?shù) | 控制單個(gè)結(jié)構(gòu)體內(nèi)成員 ≤ 10K |
| ? 禁用危險(xiǎn)命令 | 比如關(guān)閉 KEYS, FLUSHALL, HGETALL |
| ? 延遲刪除 / 慢刪策略 | 例如將大 key 分批 UNLINK 刪除 |
| ? 限制最大 value 大小 | 字符串不要超過幾 KB,避免超過 MTU |
UNLINK vs DEL 的區(qū)別:
| 命令 | 說明 |
|---|---|
DEL | 立即刪除(阻塞線程) |
UNLINK | 異步刪除,非阻塞 ? |
? Redis 4.0+ 建議用 UNLINK 刪除大 key!
總結(jié)對(duì)比表
| 類型 | 觸發(fā)方式 | 風(fēng)險(xiǎn) | 解決方案核心 |
|---|---|---|---|
| 熱 key | 高頻訪問同一個(gè) key | CPU 飆升、擊穿、熱點(diǎn) | 本地緩存、分片、限流、預(yù)熱 |
| 大 key | value 結(jié)構(gòu)太大 | 慢查詢、阻塞、同步問題 | 拆分結(jié)構(gòu)、異步刪除、結(jié)構(gòu)約束、UNLINK |
到此這篇關(guān)于Redis 熱 key 和大 key 問題的文章就介紹到這了,更多相關(guān)Redis 熱 key 和大 key內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis高階使用消息隊(duì)列分布式鎖排行榜等(高階用法)
在大多數(shù)傳統(tǒng)的web系統(tǒng)中,使用Redis一般都是作為緩存使用,在大數(shù)據(jù)查詢時(shí)作為緩解性能的一種解決方案,這篇文章主要介紹了Redis高階使用消息隊(duì)列分布式鎖排行榜等,需要的朋友可以參考下2024-03-03
Redisson分布式限流的實(shí)現(xiàn)原理分析
這篇文章主要介紹了Redisson分布式限流的實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
redis?zset實(shí)現(xiàn)滑動(dòng)窗口限流的代碼
這篇文章主要介紹了redis?zset實(shí)現(xiàn)滑動(dòng)窗口限流,滑動(dòng)窗口算法思想就是記錄一個(gè)滑動(dòng)的時(shí)間窗口內(nèi)的操作次數(shù),操作次數(shù)超過閾值則進(jìn)行限流,本文通過實(shí)例代碼給大家詳細(xì)介紹,需要的朋友參考下吧2022-03-03
Redis 在 Spring 項(xiàng)目中的使用及操作方法
本文詳細(xì)介紹了Redis在Spring項(xiàng)目中的常見使用場(chǎng)景,展示了如何利用Redis解決各種分布式問題,提升系統(tǒng)性能和用戶體驗(yàn),感興趣的朋友跟隨小編一起看看吧2025-11-11
CentOS系統(tǒng)安裝Redis及Redis的PHP擴(kuò)展詳解
這篇文章主要介紹了CentOS系統(tǒng)下安裝Redis數(shù)據(jù)的教程,以及詳解了Redis數(shù)據(jù)庫(kù)的PHP擴(kuò)展,文中介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12

