三大緩存問題及解決方案

在咱們的實際開發應用中,緩存機制的普遍存在,大大的提升了系統對數據庫的請求承受閾值,可是在一些特定的場景下,須要去了解它可能出現的問題和對應的解決方案,才能更好的增長咱們系統的健壯性算法

1.緩存穿透數據庫

問題場景
在通常的查詢場景下,當一次查詢從緩存中查詢不到對應的信息,那麼會繼續去訪問數據庫進行查詢,這種過程被稱爲緩存穿透。看似正常的操做,實際上,當有人惡意的去使用根本不存在的數據去頻繁訪問服務器,可能就會形成系統的癱瘓。數組

解決方案
bloom filter(布隆過濾器):是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表示一個集合,並能判斷一個元素是否屬於這個集合。它是一個判斷元素是否存在集合的快速的機率算法。在某些查詢中,能夠將全部可能的查詢條件放入這個集合,在查詢以前使用這個集合對查詢條件進行過濾,就能夠避免緩存穿透的問題。
空值緩存:在第一次查詢爲空值以後,將這個查詢條件key存入緩存中,緩存時間設置爲較短期,這樣能夠應對一些短期內大量重複查詢的狀況。緩存

2.緩存雪崩服務器

問題場景
咱們在使用例如Redis來進行緩存操做的時候,通常會給緩存設置一個過時時間,可是對於大量緩存過時時間相同的系統來講,可能會由於某個時間段緩存同時失效而形成全部本應該由緩存來接受的請求直接請求到數據庫,形成數據庫崩潰。當發生雪崩的時候,沒有一片雪花以爲是本身的責任。數據結構

解決方案
交叉失效時間:在設置緩存時間的時候,咱們能夠在一段合理的範圍時間內,隨機的去設置這些緩存的過時時間,避免同一過時時間開發

3.緩存擊穿效率

問題場景
緩存擊穿是緩存雪崩的一個特例,某個單獨的熱點的緩存由於過時時間致使失效,那麼一樣會有大量的請求去訪問數據庫致使崩潰。與緩存雪崩不一樣的是,緩存擊穿更像是某一熱度點的緩存雪崩。隨機數

解決方案
二級緩存:對於那些熱度高的數據設置二級緩存,而且錯開和一級緩存的失效時間,使請求不會同時穿透兩層緩存去訪問數據庫請求

相關文章
相關標籤/搜索