Redis的熱key問題

概述

什么是熱key?
當(dāng)一個(gè)key的訪問量明顯大于其他key的時(shí)候霎终,他就可以被稱為熱key咧最。
什么情況下產(chǎn)生熱點(diǎn)Key問題蹬屹?
比如瞬間有幾十萬的請求去訪問redis上某個(gè)固定的key匿级。
這種情況其實(shí)在日常工作生活中是常見的事件空镜,例如:熱門商品降價(jià)促銷、熱點(diǎn)新聞咳焚、熱點(diǎn)評論洽损、明星直播等,這些典型的讀多寫少的場景就會(huì)產(chǎn)生熱點(diǎn)問題革半。

熱Key問題

假如突然有幾十萬的請求去訪問redis上的某個(gè)特定key碑定。那么,這樣會(huì)造成流量過于集中又官,達(dá)到物理網(wǎng)卡上限不傅,從而導(dǎo)致這臺(tái)redis的服務(wù)器宕機(jī)。
那接下來這個(gè)key的請求赏胚,就會(huì)直接懟到你的數(shù)據(jù)庫上,導(dǎo)致你的服務(wù)不可用商虐。

發(fā)現(xiàn)熱Key

  • 憑借業(yè)務(wù)經(jīng)驗(yàn)觉阅,進(jìn)行預(yù)估哪些是熱key
    其實(shí)這個(gè)方法還是挺有可行性的。比如某商品在做秒殺秘车,那這個(gè)商品的key就可以判斷出是熱key典勇。缺點(diǎn)很明顯,并非所有業(yè)務(wù)都能預(yù)估出哪些key是熱key叮趴。
  • 在客戶端進(jìn)行收集
    這個(gè)方式就是在操作redis之前割笙,加入一行代碼進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。那么這個(gè)數(shù)據(jù)統(tǒng)計(jì)的方式有很多種眯亦,也可以是給外部的通訊系統(tǒng)發(fā)送一個(gè)通知信息伤溉。缺點(diǎn)就是對客戶端代碼造成入侵。有贊的就是采用對原生jedis包的JedisPool和Jedis類做了改造妻率,在JedisPool初始化過程中集成TMC“熱點(diǎn)發(fā)現(xiàn)”+“本地緩存”功能從而實(shí)現(xiàn)熱key發(fā)現(xiàn)和治理乱顾。
  • 自己抓包評估
    自己寫程序監(jiān)聽redis端口,按照RESP協(xié)議規(guī)則解析數(shù)據(jù)宫静,進(jìn)行分析走净。缺點(diǎn)就是開發(fā)成本高,維護(hù)困難孤里,有丟包可能性伏伯。
  • 業(yè)務(wù)埋點(diǎn)分析
    通過業(yè)務(wù)埋點(diǎn)日志進(jìn)行統(tǒng)計(jì)分析,找出高頻接口和熱點(diǎn)參數(shù)捌袜,再結(jié)合業(yè)務(wù)分析出熱key

解決方案

  • 利用二級緩存
    比如利用ehcache说搅,或者一個(gè)HashMap都可以。在你發(fā)現(xiàn)熱key以后虏等,把熱key加載到系統(tǒng)的JVM中蜓堕。針對這種熱key請求抛虏,會(huì)直接從jvm中取,而不會(huì)走到redis層套才。缺點(diǎn)就是需要考慮緩存一致性問題迂猴。常見框架:J2cache
  • 備份熱key
    采用redis集群模式,將同一份熱key在集群中備份多份背伴,具體實(shí)現(xiàn)可以采用固定前綴+隨機(jī)數(shù)的方式將熱key分散到集群中的多個(gè)節(jié)點(diǎn)沸毁,從而分散請求量
//偽代碼示例
const M = N * 2
//生成隨機(jī)數(shù)
random = GenRandom(0, M)
//構(gòu)造備份新key
bakHotKey = hotKey + “_” + random
data = redis.GET(bakHotKey)
if data == NULL {
 data = GetFromDB()
 redis.SET(bakHotKey, expireTime + GenRandom(0,5))
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市傻寂,隨后出現(xiàn)的幾起案子息尺,更是在濱河造成了極大的恐慌,老刑警劉巖疾掰,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搂誉,死亡現(xiàn)場離奇詭異,居然都是意外死亡静檬,警方通過查閱死者的電腦和手機(jī)炭懊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拂檩,“玉大人侮腹,你說我怎么就攤上這事〉纠” “怎么了父阻?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長望抽。 經(jīng)常有香客問我加矛,道長,這世上最難降的妖魔是什么煤篙? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任荒椭,我火速辦了婚禮,結(jié)果婚禮上舰蟆,老公的妹妹穿的比我還像新娘趣惠。我一直安慰自己,他們只是感情好身害,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布味悄。 她就那樣靜靜地躺著,像睡著了一般塌鸯。 火紅的嫁衣襯著肌膚如雪侍瑟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音涨颜,去河邊找鬼费韭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庭瑰,可吹牛的內(nèi)容都是我干的星持。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼弹灭,長吁一口氣:“原來是場噩夢啊……” “哼督暂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起穷吮,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤逻翁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捡鱼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體八回,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年驾诈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缠诅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翘鸭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戳葵,到底是詐尸還是另有隱情就乓,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布拱烁,位于F島的核電站生蚁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏戏自。R本人自食惡果不足惜邦投,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擅笔。 院中可真熱鬧志衣,春花似錦、人聲如沸猛们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弯淘。三九已至绿店,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背假勿。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工借嗽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人转培。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓恶导,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堡距。 傳聞我的和親對象是個(gè)殘疾皇子甲锡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容