Redis 快取穿透和雪崩 08

2021-10-25 05:31:34 字數 727 閱讀 5967

概念:

使用者查詢乙個資料,redis沒有。去持久化mysql中查詢,發現也沒有,查詢失敗,使用者很多,給資料庫造成壓力

例子:惡意攻擊

解決方案:

布隆過濾器(對可能查詢的引數以hash形式儲存,控制層校驗,u符合就對其)

redis存key,值為null,設定較短的過期時間

方法的問題:

空值被快取,需要更多空間儲存key,可能有很多空值的鍵

即使對空值設定過期時間,肯哪個還是存在快取層和儲存層資料的一定時間的不一致

概念:乙個熱點key,不停扛著高併發,併發集中乙個點訪問,在這個key失效點瞬間,持續高併發就穿破快取,直接請求資料庫

解決方案:

設定熱點資料不過期

加互斥鎖

使用分布式鎖,保證每個key同時只有乙個執行緒查詢後端服務的mysql,其他執行緒未拿到分布式鎖,只需等待。這種方式講高併發壓力轉移到分布式鎖

概念:某乙個時間段,快取集中過期失效,或者redis宕機

原因:比如雙十一0點搶購,商品集中時間進入快取過期時間,這時候的查詢都落到mysql中,導致mysql掛掉

解決方案:

redis高可用,搭建集群

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

資料預熱

中即將發生大併發訪問前手動出發家在快取不同的key,設定不同過期時間,讓快取的時間盡量均勻

Redis快取穿透和雪崩

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

Redis 快取穿透和雪崩

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

Redis快取穿透和雪崩

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