Redis大key問題及解讀
1、什么是大key
在redis中,大key通常指以下三種情況之一:
1、value過大:單個key的value體積過大(如字符串值超過10KB,集合/列表/哈希/有序集合元素過多)
2、元素過多:集合類型(hash/list/set/zset)中包含大量元素(如超過5000個元素)
3、結(jié)構(gòu)復(fù)雜:key對應(yīng)的數(shù)據(jù)結(jié)構(gòu)嵌套過深或過于復(fù)雜
2、大key的危害
【1】阻塞風(fēng)險
1、大key的讀寫操作會消耗更多CPU和內(nèi)存。
2、可能會導(dǎo)致redis阻塞,影響其他請求的響應(yīng)時間。
【2】網(wǎng)絡(luò)阻塞
1、大key傳輸會占用大量帶寬。
2、可能會導(dǎo)致集群節(jié)點(diǎn)間同步延遲。
【3】內(nèi)存不均
1、在集群模式下,大key會導(dǎo)致數(shù)據(jù)分片不均衡。
2、可能造成某些節(jié)點(diǎn)內(nèi)存壓力過大。
【4】持久化問題
1、AOF重寫和RDB生成時處理大key會變慢。
2、可能導(dǎo)致持久化失敗或服務(wù)暫停。
3、如何發(fā)現(xiàn)大key
【1】使用內(nèi)置命令
redis-cli --bigkeys #掃描并統(tǒng)計大key
【2】使用memory命令(Redis 4.0+)
MEMORY USAGE key_name #查看指定key的內(nèi)存使用
【3】使用scan命令
redis-cli --scan --pattern '*' | while read key; do echo "$key: $(redis-cli memory usage "$key")"; done
【4】監(jiān)控工具
1、RedisInsight 2、Redis Desktop Manager
4、解決方案
【1】拆分大key
1、將大hash拆分成多個小hash
2、對大list/set進(jìn)行分片
【2】使用合適的數(shù)據(jù)結(jié)構(gòu)
1、根據(jù)合適的業(yè)務(wù)場景使用合適的數(shù)據(jù)結(jié)構(gòu)
【3】設(shè)置過期時間
1、EXPIRE key seconds
【4】漸進(jìn)式刪除
1、對大key刪除,使用UNLINK代替DEL(非阻塞)
2、對集合類型,分批刪除
【5】客戶端緩存
1、對不常變更的大key使用客戶端緩存
5、最佳實(shí)踐
【1】設(shè)計階段預(yù)防
1、預(yù)估數(shù)據(jù)規(guī)模,提前設(shè)計合理的key結(jié)構(gòu)
2、避免單個key存儲過多數(shù)據(jù)
【2】監(jiān)控告警
1、設(shè)置大key監(jiān)控告警
2、定期掃描和清理
【3】讀寫優(yōu)化
1、對大key使用pipeline減少網(wǎng)絡(luò)往返
2、避免對大key進(jìn)行范圍操作
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
從一個小需求感受Redis的獨(dú)特魅力(需求設(shè)計)
Redis在實(shí)際應(yīng)用中使用的非常廣泛,本篇文章就從一個簡單的需求說起,為你講述一個需求是如何從頭到尾開始做的,又是如何一步步完善的2019-12-12
Redis數(shù)據(jù)結(jié)構(gòu)之intset整數(shù)集合使用學(xué)習(xí)
這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)之整數(shù)集合使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
詳解Redis中的BigKey如何發(fā)現(xiàn)和處理
這篇文章主要為大家詳細(xì)介紹了Redis中的BigKey如何發(fā)現(xiàn)和處理,文中給大家詳細(xì)講解了BigKey危害和如何解決這些問題,文章通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
詳談redis跟數(shù)據(jù)庫的數(shù)據(jù)同步問題
文章討論了在Redis和數(shù)據(jù)庫數(shù)據(jù)一致性問題上的解決方案,主要比較了先更新Redis緩存再更新數(shù)據(jù)庫和先更新數(shù)據(jù)庫再更新Redis緩存兩種方案,文章指出,刪除Redis緩存后再更新數(shù)據(jù)庫的方案更優(yōu),因?yàn)樗梢员苊鈹?shù)據(jù)不一致的問題,但可能產(chǎn)生高并發(fā)問題2025-01-01

