Redis 快取穿透和雪崩

2021-10-19 18:05:09 字數 1006 閱讀 7937

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

list

list = demoservice.

getdemodata

(demoid);/*

* 防止快取穿透

* 解決方案: 把空的資料也快取起來,比如空字串,空物件,空陣列或者list

*/if

(list != null && list.

size()

>0)

else

布隆過濾器,簡單來理解就是,0和1組成的陣列,1代表存在,redis中的key會存在布隆過濾器中,如下圖所示,1的位置代表key的索引存在位置。

當布隆過濾器中,可以找到key的索引的時候,就像demo:1一樣,資料會從redis中正常返回。

如果索引找不到,就像demo:-1一樣的話,就直接返回nil的值。

布隆過濾器

**層面

快取雪崩是指,在乙個特定的時間,redis中存在的的key,大面積的失效。這時候很大的流量湧入進來,會直接到達資料庫伺服器,資料庫宕機崩潰,反覆重啟服務,不起作用。

一些熱點資料,直接設定為永不過期,這樣熱點資料的訪問就始終會走快取服務。

快取資料的key在進行設定的時候,可以對資料分批設定不同的過期時間,也可以隨機範圍內的過期時間,使其分布在不同的過期時間段。

可以使用多級快取方案,比如 nginx本地快取+redis分布式快取+tomcat堆快取的多級快取架構。

可以購買使用第三方的redis服務,第三方的redis服務的效能以及擴充套件性相對來說,比自行部署的要高。

Redis快取穿透和雪崩

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

Redis快取穿透和雪崩

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

Redis快取穿透和雪崩

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