redis緩存失效


Redis緩存穿透和雪崩

redis緩存的使用極大的提升了應用程序的性能和效率,特別是數據查詢方面,但同時,它也帶來了一些問題。其中,最要害的問題,就是一些數據的一致性問題,從嚴格意義上講,這個問題不好解決。如果對數據的一致性要求很高,那么不能是用緩存。

另外的問題就是緩存穿透,緩存雪崩和緩存擊穿。

緩存穿透

​ 緩存穿透是指緩存和數據庫中都沒有的數據,而用戶不斷發起請求,如發起為id為“-1”的數據或id為特別大不存在的數據。這時的用戶很可能是攻擊者,攻擊會導致數據庫壓力過大。

解決方案

1、當數據庫也查不到時,可以在緩存中存一個空對象,但這個存在弊端,可能在緩存中會存在大量的值為空的鍵

2、布隆過濾器:布隆過濾器是一種數據結構,對所有可能查詢的參數以hash形式存儲,在控制層先進行校驗,不符合規則的直接丟棄,從而避免了底層存儲系統的查詢壓力。

緩存擊穿

​ 緩存穿透和緩存擊穿的區別:緩存擊穿是指一個key非常熱點,在不停的扛着大並發,大並發集中對這一個點進行訪問,當這個key在失效的瞬間,持續的大並發就擊破緩存,直接請求數據庫。導致數據庫的壓力過大,數據庫可能因此宕機。

解決方案

1、設置熱點數據永不過期

2、加互斥鎖:可以利用redis來進行分布式鎖(setnx)來保證同時只有一個線程去查詢后端服務,其他線程沒有獲得分布式鎖的權限,因此只需要等待即可,這種方式將高並發的壓力轉移到了分布式鎖上,因此對分布式鎖的考驗很大。

緩存雪崩

​ 緩存雪崩是指緩存中數據大批量到過期時間,而查詢數據量巨大,引起數據庫壓力過大甚至down機。和緩存擊穿不同的是, 緩存擊穿指並發查同一條數據,緩存雪崩是不同數據都過期了,很多數據都查不到從而查數據庫。

解決方案

1、高並發情況下,可以停掉一些次要的服務,保證熱點的服務扛過當前的高峰期

2、保證緩存服務高可用,設置redis集群

3、避免緩存集中失效,不同的key設置不同的超時時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM