Redis緩存穿透、緩存雪崩問題

穿透雪崩主要是因爲查詢數據庫造成的,那麼讀寫分離,緩存數據查詢失敗不去查數據庫就好了。查的時候有即是有,無即是無,不會再查數據庫,緩存的穿透和雪崩問題就不存在了。其次添加數據庫和緩存同步功能,保證數據庫和緩存數據是一致的即可(需要注意的是這時候數據庫數據是有限和相對穩定的,其實如果是海量數據同時放入緩存這種設計策略,我個人認爲本身就有些胡鬧)。

緩存穿透問題
現象:請求緩存中麼有對對應key的時候去數據庫取,大量的緩存穿透可能造出數據庫不可用。
解決方法:
1.數據庫查詢爲空,則空值更新緩存(會增加緩存無效值)
2.使用布隆過濾器,對於重複調用進行拒絕訪問(會產生誤判和邏輯複雜度)
緩存雪崩問題
現象:緩存失效,請求直接到DB上導致DB不可用
解決方案:key不失效;key失效時間錯開;分佈式多活

總結

緩存的穿透和雪崩都是在緩存不可用時,大量連接到數據庫導致數據庫不可用導致的,從本質上來說做好數據庫的高可用,比如數據庫雙活,數據庫擴容,數據庫主從備份,流量監控,分流限流策略等都可以提高服務可用性,爲服務恢復贏得有效時間。
當然另一個要考慮的問題是黑客攻擊,因爲正常服務請求很難造出DB不可用,如果是黑客的大量請求,那麼相應的請求告警策略,流量分流限流策略就是非常必要的網絡安全保證方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章