快取在計算機中是一種被廣泛使用的策略,包括單機的計算機體系,通過cpu+記憶體+硬碟的方式實現,基本上硬碟的儲存空間卻近似記憶體的訪問速度,這裡記憶體就是cpu和硬碟之間的快取。而pc**現的一級快取,二級快取,是記憶體和cpu之間的快取,這樣可以使得pc享受記憶體的空間大小,接近cpu快取記憶體的訪問速度。而本文主要是介紹在分布式系統中的快取。我們先看下流程圖:
這裡快取的作用是加快顯示資料的速度,減少訪問db的請求,從而減少db的壓力。當然在不同的系統中可能不是僅僅減少db的壓力。
但是在分布式系統中最容易出現三種問題,分別是快取雪崩、快取穿透、快取擊穿。下面我們分別對這三種問題做解釋,並簡單介紹下解決方案。
快取雪崩是指在某一時刻快取突然不可用,然後所有的請求都定向的db,可能會拖死db。這裡的突然不可用,包括獲得快取的值為null或者報錯。導致這種現象的原因是突然間大量的快取過期失效,或者是快取伺服器掛了,服務不可用等。
解決的方案:
快取擊穿是針對的獲得快取資料沒有,但是換的db資料有,而且是某一時刻大量的這樣的請求,有點類似快取雪崩的一種情況。類似的場景就是一直都訪問某些key,在某乙個時間點這些key都過期了,所以這些key就要再次從資料庫中得到。
解決的方案:
快取穿透顧名思義就是,穿透快取,將請求打到db上去。主要是應對惡意攻擊者,故意的請求快取中沒有且db中也沒有的資料,類似於dos攻擊,拖垮db或者減慢db的正常業務的處理。
解決的方案:
快取中的這三個問題,也是一般程式設計師面試中經常被問到的問題,但是理解的流程基本上都不難,上面是簡單介紹了這三個問題,並列舉了幾個結果方案。希望對讀者在工作學習中有所幫助。其實快取還是有很多問題,基本上這些問題在分布式中都會存在,包括快取失效還是更新,先快取還是先db等問題,這留給以後的文章中詳細介紹。謝謝閱讀!
限於筆者知識有限,如果不足之處請幫忙指正,不喜勿噴!
您的支援是我不懈努力的動力,請讀者多支援下!
快取常見三大問題
之前常聽人說,但是沒有仔細想過這些問題。最近看 可伸縮服務架構 架構與中介軟體 中這些問題解釋的很好,也給出了一般解決方案,記錄一下。快取穿透 快取併發 快取雪崩常見的由於併發量大而導致。說明 快取穿透指的是使用不存在的key進行大量的高併發查詢,這導致快取無法命中,每次請求都要穿透到後端資料庫系統...
Redis三大問題 快取穿透 快取擊穿 快取雪崩
快取擊穿 快取雪崩 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,直接返回空結果。快取穿透就是當使用者訪問一條資料時,快取和資料庫中都不存在,就會不斷的發起請求。如果使用者是攻擊者,會導致資料庫壓力過大。解決方案 快取空物件 ...
快取三大問題再總結
快取三大問題再總結 1 快取穿透 定義 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,進而給db帶來壓力。解決 方案一 快取空資料 優點 簡單 缺點 效果不好 1 第一次查詢需要查庫 2 如果換另...