Memcached 之緩存雪崩現象、實際案例和緩存無底洞現象

1、緩存雪崩現象mysql

  因爲集羣中某個memcached服務器宕機的緣由,形成集羣中的服務器命中率降低。只能經過訪問數據庫獲得數據,是的數據庫的壓力倍增,形成數據庫服務器崩潰。重啓數據庫仍是會崩潰,可是數據會緩存一部分,屢次重啓則緩衝創建完畢。或者緩衝週期性的失效,好比每6個小時失效一次,那麼每6個小時會有一個「峯值」,嚴重的會形成數據庫崩潰。算法

2、案例sql

  一個門戶網站作的一個緩存,6小時緩存失效一次,失效後兩個小時內mysql負載很高,而後mysql服務器掛掉。數據庫

  

  解決方案:緩存

    1.緩存失效時間設置爲隨機3到9小時失效,讓讀取mysql數據庫的次數分散開,而非集中在必定時間。服務器

    2.將緩存時間調長,天天夜裏刷新緩存數據。分佈式

3、緩存無底洞現象memcached

  memcached鏈接頻率升高,效率降低,因而就增長memcache服務器,可是這種問題依然存在,這種現象稱之爲「無底洞現象」。出現這種現象是由於隨着用戶的增多,用戶的信息會隨機的存儲在更多的memcache服務器上(一致性哈希算法),在獲取某個用戶的信息時,會致使鏈接服務器的頻率增長。網站

  解決方案:把某一組key,按共同前綴分佈,好比:user表中的,user-133-name,user-133-age這2個key,在用分佈式算法計算節點時,應該用「user-133」來計算,而不是用user-133-name/age來計算。2個關於我的信息的key都會落在一個服務器上,那麼在訪問的時候也只會在一個服務器上查詢。blog

相關文章
相關標籤/搜索