Redis 熱 key 和大 key 問(wèn)題小結(jié)
一、什么是 Redis 熱 key?
熱 key(Hot Key)定義:
在單位時(shí)間內(nèi)被**頻繁訪問(wèn)(讀/寫)**的 key,導(dǎo)致其訪問(wèn)集中、壓力過(guò)大。
熱 key 常見表現(xiàn):
- QPS 極高(某 key 每秒被訪問(wèn)幾萬(wàn)次)
- 某業(yè)務(wù)高頻讀寫一個(gè) key(如秒殺庫(kù)存、排行榜 top1)
- Redis 實(shí)例 CPU 異常,卻只服務(wù)一個(gè) key
熱 key 的風(fēng)險(xiǎn):
問(wèn)題 | 說(shuō)明 |
---|---|
單點(diǎn)壓力過(guò)大 | 所有請(qǐng)求打到同一個(gè) key 上 |
緩存擊穿 | 熱 key 過(guò)期瞬間,大量請(qǐng)求落到 DB |
主從復(fù)制延遲 | 熱 key 改變頻繁 → 主從同步數(shù)據(jù)猛增 |
節(jié)點(diǎn)不均衡(集群) | Redis Cluster 中 key 分布不均勻 |
熱 key 解決方案:
問(wèn)題 | 說(shuō)明 |
---|---|
單點(diǎn)壓力過(guò)大 | 所有請(qǐng)求打到同一個(gè) key 上 |
緩存擊穿 | 熱 key 過(guò)期瞬間,大量請(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):
問(wèn)題 | 說(shuō)明 |
---|---|
? 刪除阻塞 | 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 文件通過(guò)慢查詢?nèi)罩?+ 監(jiān)控查看
HGETALL
、LRANGE
、SMEMBERS
的大 key
大 key 解決方案:
方案 | 說(shuō)明 |
---|---|
? 拆分?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 大小 | 字符串不要超過(guò)幾 KB,避免超過(guò) MTU |
UNLINK vs DEL 的區(qū)別:
命令 | 說(shuō)明 |
---|---|
DEL | 立即刪除(阻塞線程) |
UNLINK | 異步刪除,非阻塞 ? |
? Redis 4.0+ 建議用 UNLINK 刪除大 key!
總結(jié)對(duì)比表
類型 | 觸發(fā)方式 | 風(fēng)險(xiǎn) | 解決方案核心 |
---|---|---|---|
熱 key | 高頻訪問(wèn)同一個(gè) key | CPU 飆升、擊穿、熱點(diǎn) | 本地緩存、分片、限流、預(yù)熱 |
大 key | value 結(jié)構(gòu)太大 | 慢查詢、阻塞、同步問(wèn)題 | 拆分結(jié)構(gòu)、異步刪除、結(jié)構(gòu)約束、UNLINK |
到此這篇關(guān)于Redis 熱 key 和大 key 問(wèn)題的文章就介紹到這了,更多相關(guān)Redis 熱 key 和大 key內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
redis持久化AOF和RDB的區(qū)別及解決各個(gè)場(chǎng)景問(wèn)題示例
這篇文章主要為大家介紹了redis持久化AOF和RDB的區(qū)別及解決各個(gè)場(chǎng)景問(wèn)題示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Redis 實(shí)現(xiàn)好友關(guān)注和關(guān)注推送的示例代碼
本文介紹了使用Redis實(shí)現(xiàn)好友關(guān)注和關(guān)注推送功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03Redis在項(xiàng)目中的使用(JedisPool方式)
項(xiàng)目操作redis是使用的RedisTemplate方式,另外還可以完全使用JedisPool和Jedis來(lái)操作redis,本文給大家介紹Redis在項(xiàng)目中的使用,JedisPool方式,感興趣的朋友跟隨小編一起看看吧2021-12-12Redis?定長(zhǎng)隊(duì)列探索及實(shí)踐
這篇文章主要介紹了Redis?定長(zhǎng)隊(duì)列探索及實(shí)踐,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08redis分布式Jedis類型轉(zhuǎn)換的異常深入研究
這篇文章主要介紹了redis分布式Jedis類型轉(zhuǎn)換的異常深入研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03redis哈希類型_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了redis哈希類型的常用方法及原理淺析,感興趣的朋友一起看看吧2017-08-08