redis緩存問題及解決方案

最近在學習redis的時候,看到許多相關問題和解決方案,下面記錄了項目日常比較常見的問題,及我理解後的解決方案。

1、緩存穿透

問題描述:

    緩存穿透是指查詢一個一定不存在的數據,由於緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。在流量大時,可能DB就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。

解決方案:

   (1)布隆過濾器。這是目前最常見的解決方法,其原理是將所有可能存在的數據哈希到一個足夠大的bitmap中,一個一定不存在的數據會被這個bitmap攔截掉,從而避免了對底層數據庫的查詢壓力。

   (2)如果一個查詢返回的數據爲空(不管是數據不存在,還是系統故障),仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。這種方法只適合一種場景:所請求的不存在數據比較集中,也就是說,a數據不存在但請求了,並且以後還會多次請求a,適合這種方法;但是如果遇到惡意使請求訪問若干個不同的不存在數據,每個數據以後較小概率被再次請求,就堅決不能用這種方法。

2、緩存雪崩

問題描述:

   如果一個查詢返回的數據爲空(不管是數據不存在,還是系統故障),仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

解決方案:

   緩存失效時的雪崩效應對底層系統的衝擊非常可怕。大多數系統設計者考慮用加鎖或者隊列的方式保證緩存的單線 程(進程)寫,從而避免失效時大量的併發請求落到底層存儲系統上。這裏分享一個簡單方案就時講緩存失效時間分散開,比如我們可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存的過期時間的重複率就會降低,就很難引發集體失效的事件。

3、緩存擊穿

問題描述:https://www.jianshu.com/p/55e245bad12a

解決方案:https://www.jianshu.com/p/55e245bad12a

4、緩存與數據庫一致性問題

問題描述:https://blog.csdn.net/hjm4702192/article/details/80518922

解決方案:https://blog.csdn.net/hjm4702192/article/details/80518922

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