概念區分: 擊穿、穿透、雪崩
大量流量下:
快取層db
場景存在
存在正常(使用快取)
不存在存在
快取擊穿
不存在不存在
快取穿透
大量的key過期,導致請求高峰,瞬間大量流量壓到了db;我們可以看到,擊穿是因為key過期,或者冷啟動熱點資料沒有載入進快取。
解決方案:
熱點key過期時間錯峰,平滑過期
快取預熱,提前將一些資料載入到快取,而不是使用者請求的時候快取中沒有查庫在寫入快取。
定時重新整理值,在key過期前已經重新更新了鍵的值以及最新的過期時間
大量請求快取、db不存在的資料,一般是惡意攻擊從上面我們可以看到,正常使用者的操作一般不可能產生穿透的場,極有可能是惡意攻擊,
解決方案:
對不存在的key快取預設值,防止同一key的大量請求被壓到db
對不存在的key加入到布隆過濾器,再次查詢這個key的時候,
快取不存在判斷是否在布隆過濾器中,在的話直接返回空值
對上面穿透請求的ip進行名單記錄,進行限制
class
test
}return value;
}}
class
test
//3.查db
value = dbservice.
get(key);}
return value;
}}
上面的1,2結果方案還有漏洞,我們上面的**只能抵擋同一key的大量請求,
如果攻擊方每次都構造了不同的key來進行攻擊呢?
這個時候,首先介面要有鑑權,根據攻擊的手法一般的發起者會在他的幾台幾十台機器上進行自動化請求那麼我們可以對同一ip進行限流;
如果攻擊繼續公升級,攻擊方調動了大量肉雞,ip封不過來,怎麼怎麼辦呢?
對這裡的服務進行降級,部分可用。
當大量的key同一時間過期,導致所有的請求都落到了資料庫上;
單機redis掛掉,導致所有請求都落到了資料庫上。
解決方案:
redis使用集群(主從、sentinel哨兵)避免單機故障
設定熱點key永不失效
設定key錯峰過期,平滑過期
**快取使用快取在應用或者memcache(使用者請求——->redis—>應用hashmap\memcache---->db)
降級服務,保證服務不掛掉
redis 快取擊穿 穿透 雪崩
一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。如何避免?1 對查詢結果為空的情況也進行快取,這樣,再次訪問時,快取層會直接返回空值。快取時間設定短一...
Redis快取雪崩 擊穿 穿透
目錄 三 快取擊穿 四 快取穿透 這三個問題一旦發生,就會導致大量請求進入後台的資料庫,如果有大量併發同時到達資料庫,有可能會導致資料庫宕機,影響業務,也有可能會導致一系列連鎖反映,很可能導致業務長時間無法恢復。接下來本文詳細介紹這三個問題的發生場景以及對應的解決方案。雪崩是指大量請求無法在redi...
快取雪崩 擊穿 穿透
1 快取雪崩 是指在某乙個時間段,快取集中過期失效,或者是快取宕機,所有請求全部打到db上。應對辦法 分散快取過期時間,具體做法是分別設定不同的快取時間,比如加上隨機因子。2 快取擊穿 當某個熱點key失效時,高併發直接請求資料庫對資料庫伺服器造成壓垮性的壓力,比如爆款商品。應對辦法 1 熱點資料永...