Redis11 快取穿透和雪崩

2021-10-09 07:28:25 字數 1261 閱讀 6724

redis11_快取穿透和雪崩

快取穿透

使用者查詢某個資料時,會先在redis快取中查詢,如果快取沒有命中,會去持久層資料庫mysql中查詢,如果此時依然沒有命中,將返回null,不會寫入快取。

當同時有大量的查詢請求在快取中沒有命中,於是都去請求mysql,給持久層資料庫造成了巨大壓力,這就是快取穿透現象

比如某個使用者不斷發起請求,如發起為id為「-1」的資料或id為特別大不存在的資料。這時的使用者很可能是攻擊者,攻擊會導致資料庫壓力過大。

解決方案1:布隆過濾器

布隆過濾器是一種資料結構,對所有可能查詢的引數以hash形式儲存,在控制層先進行校驗,不合法的請求將丟棄,從而避免了對底層儲存系統的壓力

解決方案2:快取空物件

該方案會存在兩個問題:

快取將需要更多的空間來儲存空值

即使對空值設定了過期時間,還是會存在快取層與儲存層的資料有一段時間視窗的不一致,這對於需要保持一致性的業務會有影響

快取擊穿

指乙個key非常熱點(微博熱搜),在不停地被併發訪問,當該key在失效的瞬間,持續的併發就會穿破快取,直接請求資料庫,導致資料庫瞬間壓力增大

解決方案1:設定熱點資料永不過期

解決方案2:加互斥鎖

快取雪崩

在某一時間段內快取集中過期失效或 redis 宕機、斷網

解決方案1:redis高可用

多增設幾台redis伺服器,防止伺服器宕機

解決方案2:限流降級

快取失效後,通過加鎖或者佇列來控制讀資料庫寫快取的執行緒數量,比如對某個 key 只允許乙個執行緒查詢資料和寫快取,其他執行緒等待

解決方案3:資料預熱

在正式部署前,先將可能需要大量訪問的資料預先訪問一遍,使其提前存入快取

Redis快取穿透和雪崩

快取的目的是什麼?提高效能,快取查詢的速度比去資料庫查詢要快。快取會分擔部分請求,減少併發壓力。那麼快取穿透是什麼?怎麼解決快取穿透呢?一般快取系統,按key去查詢value,如果不存在相應的key,那麼就會去資料庫查詢,如果key對應的value是一定不存在的,並且對key的併發查詢很高,那麼每次...

Redis 快取穿透和雪崩

快取穿透是指快取和資料庫中都沒有的資料,而使用者不斷發起請求,如發起為id為 1 的資料或id為特別大不存在的資料。這時候就會繞過快取,每次都請求資料庫,這樣的話,大量的請求都直接到達資料庫,這種現象就叫快取穿透。list list demoservice.getdemodata demoid 防止...

Redis快取穿透和雪崩

服務的高可用問題 redis快取的使用,極大的提公升了應用程式的效能和效率,特別是資料查詢方面。但同時,它也帶來了一 些問題。其中,要害的問題,就是資料的一致性問題,從嚴格意義上講,這個問題無解。如果對資料 的一致性要求很高,那麼就不能使用快取。另外的一些典型問題就是,快取穿透 快取雪崩和快取擊穿。...