天天看點

緩存穿透 緩存雪崩

1. 緩存穿透:查詢一個必然不存在的資料。比如文章表,查詢一個不存在的id,每次都會通路DB,如果有人惡意破壞,很可能直接對DB造成影響。

解決辦法:對所有可能查詢的參數以hash形式存儲,在控制層先進行校驗,不符合則丢棄。

2.緩存失效:如果緩存集中在一段時間内失效,DB的壓力凸顯。這個沒有完美解決辦法,但可以分析使用者行為,盡量讓失效時間點均勻分布。

當發生大量的緩存穿透,例如對某個失效的緩存的大并發通路就造成了緩存雪崩。

http://www.oschina.net/question/54100_31749

緩存系統不得不考慮的另一個問題是緩存穿透與失效時的雪崩效應。緩存穿透是指查詢一個一定不存在的資料,由于緩存是不命中時被動寫的,并且出于容錯考慮,如果從存儲層查不到資料則不寫入緩存,這将導緻這個存在的資料每次請求都要到存儲層去查詢,失去了緩存的意義。

有 很多種方法可以有效地解決緩存穿透問題,最常見的則是采用布隆過濾器,将所有可能存在的資料哈希到一個足夠大的bitmap中,一個一定不存在的資料會被 這個bitmap攔截掉,進而避免了對底層存儲系統的查詢壓力。在資料魔方裡,我們采用了一個更為簡單粗暴的方法,如果一個查詢傳回的資料為空(不管是數 據不存在,還是系統故障),我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

緩 存失效時的雪崩效應對底層系統的沖擊非常可怕。遺憾的是,這個問題目前并沒有很完美的解決方案。大多數系統設計者考慮用加鎖或者隊列的方式保證緩存的單線 程(程序)寫,進而避免失效時大量的并發請求落到底層存儲系統上。在資料魔方中,我們設計的緩存過期機制理論上能夠将各個用戶端的資料失效時間均 勻地分布在時間軸上,一定程度上能夠避免緩存同時失效帶來的雪崩效應。

http://www.cnblogs.com/AloneSword/p/3931905.html