緩存穿透和緩存失效

緩存穿透緩存

是指查詢一個必定不存在的數據,因爲緩存是不命中時被動寫的,而且出於容錯考慮,若是從存儲層查不到數據則不寫入緩存,這將致使這個存在的數據每次請求都要到存儲層去查詢,失去了緩存的意義。併發

有不少種方法能夠有效地解決緩存穿透問題,最多見的則是採用布隆過濾器,將全部可能存在的數據哈希到一個足夠大的bitmap中,一個必定不存在的數據會被 這個bitmap攔截掉,從而避免了對底層存儲系統的查詢壓力(相似無結果cache)。在數據魔方里,咱們採用了一個更爲簡單粗暴的方法,若是一個查詢返回的數據爲空(無論是數 據不存在,仍是系統故障),咱們仍然把這個空結果進行緩存,但它的過時時間會很短,最長不超過五分鐘。設計

 

緩存失效隊列

緩存失效時的雪崩效應對底層系統的衝擊很是可怕。遺憾的是,這個問題目前並無很完美的解決方案。大多數系統設計者考慮用加鎖或者隊列的方式保證緩存的單線 程(進程)寫,從而避免失效時大量的併發請求落到底層存儲系統上。在數據魔方中,咱們設計的緩存過時機制理論上可以將各個客戶端的數據失效時間均 勻地分佈在時間軸上,必定程度上可以避免緩存同時失效帶來的雪崩效應。也能夠設計一個隨機時間失效的緩存系統,可是考慮業務相關性,這些隨機數不能差距太大。有沒有平滑失效解決方案?進程

相關文章
相關標籤/搜索