緩存雪崩現(xiàn)象如何解決?

什么是緩存的雪崩現(xiàn)象

緩存雪崩一般是由某個緩存節(jié)點失效,導(dǎo)致其他節(jié)點的緩存命中率下降,緩存中缺失的數(shù)據(jù)(memcache經(jīng)典場景,當(dāng)有一個客戶端的服務(wù)請求過來的時候,首先去查memcache,memcache里面是否緩存過了這個數(shù)據(jù),如果沒有這個數(shù)據(jù),我們就去數(shù)據(jù)庫查詢,如果有這個數(shù)據(jù),我們就從memcache里面取出來,然后給它返回到客戶端,這是一個經(jīng)典的查詢過程,在這個場景中,緩存中缺失的數(shù)據(jù),是因為它的緩存節(jié)點失效了,所以缺失的數(shù)據(jù)將去數(shù)據(jù)庫查詢。去數(shù)據(jù)庫查詢.短時間內(nèi),造成數(shù)據(jù)庫服務(wù)器崩潰.

重啟DB,短期又被壓跨,但緩存數(shù)據(jù)也多一些.

DB反復(fù)多次啟動多次,緩存重建完畢,DB才穩(wěn)定運行.

或者,是由于緩存周期性的失效,比如每8小時失效一次,那么每8小時,將有一個請求”峰值”,

嚴(yán)重者甚至?xí)頓B崩潰.


上圖是之前部門的一個緩存的真實現(xiàn)象,具體是這樣的緩存的數(shù)據(jù)設(shè)置成為每8個小時失效一次,導(dǎo)致最終的結(jié)果是每8個小時數(shù)據(jù)庫的壓力就變大一次,每8個小時我們的數(shù)據(jù)庫就會迎來一次請求的高峰,因為之前設(shè)置的緩存已經(jīng)失效了。最終導(dǎo)致數(shù)據(jù)庫的壓力變得非常大。

有什么好的解決方案

這個沒有完美解決辦法,但可以分析用戶行為,盡量讓失效時間點均勻分布。不用把時間都設(shè)置成8小時一次,可以把里面的數(shù)據(jù)隨機分布,比如設(shè)置成3—8小時隨機的失效,就不會導(dǎo)致數(shù)據(jù)庫的壓力變得非常大。

即可以這樣:

在緩存失效后,通過加鎖或者隊列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。比如對某個key只允許一個線程查詢數(shù)據(jù)和寫緩存,其他線程等待。 不同的key,設(shè)置不同的過期時間,讓緩存失效的時間點盡量均勻。 做二級緩存,A1為原始緩存,A2為拷貝緩存,A1失效時,可以訪問A2,A1緩存失效時間設(shè)置為短期,A2設(shè)置為長期,變相使緩存時間均勻一些。

文章來源:麥子學(xué)院

原文鏈接:http://www.maiziedu.com/wiki/memcache/avalanche/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、MemCache簡介 session MemCache是一個自由、源碼開放、高性能、分布式的分布式內(nèi)存對象緩存...
    李偉銘MIng閱讀 4,017評論 2 13
  • 1、memcache的概念? Memcache是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng),通過在內(nèi)存里維護一個統(tǒng)一的巨...
    桖辶殤閱讀 2,366評論 2 12
  • 一、什么是可伸縮性 可伸縮性是一種對軟件系統(tǒng)計算處理能力的設(shè)計指標(biāo),高可伸縮性代表一種彈性,在系統(tǒng)擴展成長的過程中...
    AQ王浩閱讀 5,147評論 2 7
  • ajax用jquery使用確實方便,但如果只用ajax,難道我們還會為了使用而引入jquery嗎?不僅如此,用原生...
    sdcV閱讀 241評論 0 0
  • 多少人問我辭職了你想做什么,以你的學(xué)歷又能做什么。太現(xiàn)實,與我心里所想的生活格格不入。 真的想就任性一回,不管他們...
    如果我是自然卷閱讀 367評論 0 0

友情鏈接更多精彩內(nèi)容