memcache快取雪崩現象
什麼是快取的雪崩現象
快取雪崩一般是由某個快取節點失效,導致其他節點的快取命中率下降, 快取中缺失的資料(memcache經典場景,當有乙個客戶端的服務請求過來的時候,首先去查memcache,memcache裡面是否快取過了這個資料,如果沒有這個資料,我們就去資料庫查詢,如果有這個資料,我們就從memcache裡面取出來,然後給它返回到客戶端,這是乙個經典的查詢過程,在這個場景中,快取中缺失的資料,是因為它的快取節點失效了,所以缺失的資料將去資料庫查詢。去資料庫查詢.短時間內,造成資料庫伺服器崩潰.
重啟 db,短期又被壓跨,但快取資料也多一些.
db 反覆多次啟動多次,快取重建完畢,db 才穩定執行.
或者,是由於快取週期性的失效,比如每 8小時失效一次,那麼每 8小時,將有乙個請求」峰值」,
嚴重者甚至會令 db 崩潰.
memcache1.png
上圖是之前部門的乙個快取的真實現象,具體是這樣的 快取的資料設定成為每8個小時失效一次,導致最終的結果是每8個小時資料庫的壓力就變大一次,每8個小時我們的資料庫就會迎來一次請求的高峰,因為之前設定的快取已經失效了。最終導致資料庫的壓力變得非常大。
有什麼好的解決方案
這個沒有完美解決辦法,但可以分析使用者行為,盡量讓失效時間點均勻分布。不用把時間都設定成8小時一次,可以把裡面的資料隨機分布,比如設定成3—8小時隨機的失效,就不會導致資料庫的壓力變得非常大。
即可以這樣:
在快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量。比如對某個key只允許乙個執行緒查詢資料和寫快取,其他執行緒等待。 不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻。 做二級快取,a1為原始快取,a2為拷貝快取,a1失效時,可以訪問a2,a1快取失效時間設定為短期,a2設定為長期,變相使快取時間均勻一些。
memcache 雪崩現象
1 什麼是memcache雪崩 快取雪崩一般是由某個快取節點失效,導致其他節點的快取命中率下降,快取中缺失的資料 memcache經典場景,當有乙個客戶端的服務請求過來的時候,首先去查 memcache,memcache裡面是否快取過了這個資料,如果沒有這個資料,我們就去資料庫查詢,如果有這個資料,...
memcache 快取雪崩現象及解決方法
1 什麼是memcache雪崩 快取雪崩一般是由某個快取節點失效,導致其他節點的快取命中率下降,快取中缺失的資料 memcache經典場景,當有乙個客戶端的服務請求過來的時候,首先去查 memcache,memcache裡面是否快取過了這個資料,如果沒有這個資料,我們就去資料庫查詢,如果有這個資料,...
三 快取雪崩現象和無底洞現象
一般是有某個節點失效,導致其他節點的快取命中率下降,快取中缺失的資料去資料庫查詢,短時間內,造成資料庫伺服器崩潰 重啟db,短時間又被壓垮,但快取資料也多了一些,db反覆多次啟動,快取重建完畢,db才穩定執行 案例 乙個上千萬pv的門戶 快取生命週期設定了6小時,當等到6小時快取失效後,之前放到快取...