redis系列02---緩存過期、穿透、擊穿、雪崩

一、緩存過期

問題產生的原由:

內存空間有限,給緩存設置過期時間,但有些鍵值運氣比較好,每次都沒有被我的隨機算法選中,每次都能倖免於難,這可不行,這些長時間過期的數據一直霸佔着不少的內存空間!

解決方案:

redis提供8種策略供應用程序選擇,用於我遇到內存不足時該如何決策:

* noeviction:返回錯誤,不會刪除任何鍵值
* allkeys-lru:使用LRU算法刪除最近最少使用的鍵值
* volatile-lru:使用LRU算法從設置了過期時間的鍵集合中刪除最近最少使用的鍵值
* allkeys-random:從所有key隨機刪除
* volatile-random:從設置了過期時間的鍵的集合中隨機刪除
* volatile-ttl:從設置了過期時間的鍵中刪除剩餘時間最短的鍵
* volatile-lfu:從配置了過期時間的鍵中刪除使用頻率最少的鍵
* allkeys-lfu:從所有鍵中刪除使用頻率最少的鍵

有了上面幾套組合拳,我再也不用擔心過期數據多了把空間撐滿的問題了~

二、緩存穿透

 問題產生的原由:

比喻黑客攻擊網站時,數據庫中沒有id爲10的數據,而它請求總是要訪問這一條不存在的數據,那此時緩存中沒有,就會一直訪問數據

 

解決方法:

1、對空值緩存:如果返回的結果是null,也將期緩存,並設置很小的過期時間,不超過5分鐘;

2、設置可以訪問的白名單:用bitmaps定義一個可以訪問的白名單,id作爲標識,每次訪問都對期比較,如果不存在就不讓訪問;

3、布隆過濾器:從超大的數據集中快速告訴你查找的數據存不存在(悄悄告訴你,我的這位朋友有一點不靠譜,它告訴你存在的話不能全信,其實有可能是不存在的,不過它他要是告訴你不存在的話,那就一定不存在),實際上是二進制向量和一哈希函數。

 

 

 

三、緩存擊穿

 問題產生的原由:緩存的某個熱點數據過期了(不是大量過期),正好此時有大量的請求要訪問該熱點數據,全都打到了數據庫上,服務器的壓力增大,叫作緩存擊穿

 解決方案:

設置熱點數據永不過期

四、緩存雪崩

 問題產生的原由:在極短的時間內,出現了大量的緩存失效,所有的請求都打到數據庫上

 解決方案:

 把鍵值的過期時間設置隨機,還設置了熱點數據永不過期

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