快取中的三大問題(常見面試題)

2021-09-02 12:55:58 字數 1469 閱讀 4013

快取的設計一般都遵循以下流程:

1、業務系統發起乙個查詢請求,首先會在快取中判斷是否存在對應結果的資料

2、如果快取中存在,則直接返回資料結果

3、如果快取中不存在,則會去資料庫中查詢對應資料,並更新快取,然後返回資料結果

我們在面試時,問道的關於快取的問題很多,但是涉及實際場景的題目一般可以分為以下三類:

1、快取穿透:

當業務系統需要查詢的資料根本在資料庫中不存在時,每一次的查詢請求都會最終對資料庫造成一次查詢,這種情況稱為快取穿透,即業務訪問根本不存在的資料。

危害:這種情況下,如果有大量的請求查詢根本不存在的資料,那麼這些請求將直接對資料庫造成衝擊,會使得資料庫壓力很大。大多數情況下為惡意攻擊,故意營造大量不存在的資料請求我們的服務,由於快取中並不存在這些資料,因此海量請求均落在資料庫中,從而可能會導致資料庫崩潰。

解決方案:1、快取空資料:即將空資料null也做成乙個快取結果,這樣在下次有相同請求到來時,快取可以攔截該請求,返回快取中的結果。2、使用bloomfilter,它需要在快取之前再加一道屏障,裡面儲存目前資料庫中存在的所有key。當業務系統有查詢請求的時候,首先去bloomfilter中查詢該key是否存在。若不存在,則說明資料庫中也不存在該資料,因此快取都不要查了,直接返回null。若存在,則繼續執行後續的流程,先前往快取中查詢,快取中沒有的話再前往資料庫中的查詢。

2、快取雪崩:

如果快取在某個時刻掛了,那麼大量的請求也將會直接訪問資料庫,造成很大壓力。

危害:如果快取因某種原因發生了宕機,那麼原本被快取抵擋的海量查詢請求就會像瘋狗一樣湧向資料庫。此時資料庫如果抵擋不了這巨大的壓力,它就會崩潰。

解決方案:1、使用快取集群,增大可用性,當乙個快取掛了還有其他的快取跟上。2、使用hystrix,它是一款開源的「防雪崩工具」,它通過 熔斷、降級、限流三個手段來降低雪崩發生後的損失。

3、熱點資料集中失效:

如果某乙個熱點資料失效,那麼當再次有該資料的查詢請求時就會前往資料庫查詢。但是,從請求發往資料庫,到該資料更新到快取中的這段時間中,由於快取中仍然沒有該資料,因此這段時間內到達的查詢請求都會落到資料庫上,這將會對資料庫造成巨大的壓力。此外,當這些請求查詢完成後,都會重複更新快取。

危害:對於一些請求量極高的熱點資料而言,一旦過了有效時間,此刻將會有大量請求落在資料庫上,從而可能會導致資料庫崩潰。

解決方案:1、使用互斥鎖,上鎖的物件為key,當失效後的第乙個查詢請求到來時,就會對快取上鎖,這時其他的查詢請求就會被擋在外面,只有乙個查詢請求去訪問資料庫,知道快取中更新了這個結果之後,剩餘的查詢請求才可查詢快取。2、對於很多熱點資料集中失效,可以設定不同的失效時間,這樣可以錯開一部分熱點資料的更新時間

redis 快取問題常見面試題

目錄 1.redis做快取,會有哪些問題?2.什麼是快取穿透?如果出現,解決方案是什麼?3.什麼是快取擊穿?如果出現,解決方案是什麼?4.什麼是快取雪崩?如果出現,解決方案是什麼?5.快取穿透,快取擊穿,快取崩潰三者的區別和聯絡是什麼?總結 redis做快取可能會出現快取穿透,快取擊穿,快取雪崩問題...

快取常見三大問題

之前常聽人說,但是沒有仔細想過這些問題。最近看 可伸縮服務架構 架構與中介軟體 中這些問題解釋的很好,也給出了一般解決方案,記錄一下。快取穿透 快取併發 快取雪崩常見的由於併發量大而導致。說明 快取穿透指的是使用不存在的key進行大量的高併發查詢,這導致快取無法命中,每次請求都要穿透到後端資料庫系統...

常見面試題(更新中)

1 面試題 如下 哪句錯誤?為什麼錯?怎麼改?short s 5 s 10 相當於s shrot s 10 s s 10 編譯錯誤,需強制轉換!2 名詞解釋 jvm j a虛擬機器 載入.class並執行.class jre j a執行環境 除了包含jvm以外還包含了執行j a程式所必須的環境 jr...