緩存穿透

1 ?緩存穿透,DB壓力增大

? ? 常用的k-v型緩存,當查詢一個key而緩存中沒有value時,就會去database中查詢,如果惡意查詢會導致db壓力增大。

? ? 解決方法:

? ?1.空對象

? ? ? 碰到查詢結果為空的鍵,放一個空值在緩存中,下次再訪問就立刻知道這個鍵無效,不會再訪問DB。

? ? ? 空對象存在的問題:1.由于每個空k-v都會存在緩存中,所以空的查詢越多,緩存需求越大,可以通過設置過期時間來解決這個問題。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.因為設置了過期時間,當此時間段內再次查詢緩存時,就會直接返回空值,而此時間段內DB數據更改了,數據就會不一致,可以用消息(kafka)來同步或者清除對應的緩存。

? ?2.布隆過濾器

? ? ?(具體見下篇)

? ? ? 去重過濾,把所有鍵值放到布隆過濾器中,布隆過濾器每個請求會返回“在集合內(可能錯誤)”和“不在集合內(絕對不在集合內)”兩種情況,所以會過濾掉大部分空值的請求,只有少量的空值請求會穿透,減少了db的壓力。

2 ?緩存雪崩

首先緩存失效,比如并發(fā)請求很多時,某一時間查詢很多數據放到緩存并且設置了過期時間,當時間結束,緩存大片失效,后面的請求都會直接走向DB,一個簡單的方法是均衡過期時間,使緩存失效的時間段平衡。

當緩存服務重啟或者大量緩存集中在某一個時間段失效,這樣在失效的時候,后端系統(tǒng)(比如DB)帶來很大壓力。可以對線程加鎖或者直接用隊列查詢DB,減小DB的壓力,缺點的增加了處理時間??梢宰鼍彺娣掌鞯闹鱾洌骶彺嫜┍篮笞邆溆梅掌?,涉及到數據的一致性問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容