Redis中如何應(yīng)對熱key問題?下面本篇文章就來給大家介紹一下Redis緩存熱key問題的常用解決方案,希望對大家有所幫助!
做一些C端業(yè)務(wù),不可避免的要引入一級緩存來代替數(shù)據(jù)庫的壓力并且減少業(yè)務(wù)響應(yīng)時間,其實每次引入一個中間件來解決問題的同時,必然會帶來很多新的問題需要注意,比如上篇文章《數(shù)據(jù)庫與緩存一致性實戰(zhàn)》中提到的如何做緩存的一致性。那么其實還會有一些其他問題比如使用Redis作為一級緩存時可能帶來的熱key、大key等問題,本文我們就熱key(hot key)
問題來討論,如何合理的解決熱key
問題。
背景
熱key
是什么問題,如何導(dǎo)致的?
一般來說,我們使用的緩存Redis都是多節(jié)點的集群版,對某個key進行讀寫時,會根據(jù)該key的hash計算出對應(yīng)的slot,根據(jù)這個slot就能找到與之對應(yīng)的分片(一個master和多個slave組成的一組redis集群)來存取該K-V。但是在實際應(yīng)用過程中,對于某些特定業(yè)務(wù)或者一些特定的時段(比如電商業(yè)務(wù)的商品秒殺活動),可能會發(fā)生大量的請求訪問同一個key。所有的請求(且這類請求讀寫比例非常高)都會落到同一個redis server上,該redis的負載就會嚴重加劇,此時整個系統(tǒng)增加新redis實例也沒有任何用處,因為根據(jù)hash算法,同一個key的請求還是會落到同一臺新機器上,該機器依然會成為系統(tǒng)瓶頸2,甚至造成整個集群宕掉,若此熱點key的value 也比較大,也會造成網(wǎng)卡達到瓶頸,這種問題稱為 “熱key” 問題?!?/p>