本篇文章給大家帶來了關于Redis的相關知識,其中主要介紹了關于怎么解決redis緩存雪崩、擊穿與穿透的相關問題,緩存雪崩是指大量的請求無法命中Redis中的緩存數據,也就是在Redis找不到數據了;下面一起來看一下,希望對大家有幫助。
千萬級數據并發如何處理?進入學習
推薦學習:Redis視頻教程
一、緩存雪崩
1. 什么是緩存雪崩?
緩存雪崩
是指大量的請求無法命中Redis
中的緩存數據,也就是在Redis
找不到數據了,那業務系統只能到數據庫中查詢,進而導致所有的請求都發送到了數據庫。如下圖所示:
數據庫并不像Redis
能處理大量請求,由緩存雪崩導致的請求激增必須會導致數據庫所在宕機,這樣勢必會影響業務系統,所以如果發生緩存雪崩,對于業務系統肯定是致命的。
2. 為什么發會生緩存雪崩?
什么情況下出現緩存雪崩呢?總結起來有以下兩個方面的原因:
-
大量
Redis
緩存數據同時過期,導致所有的發送到Redis
請求都無法命中數據,只能到數據庫中進行查詢。 -
Redis
服務器宕機,所有請求都無法經Redis
來處理,只能轉向數據庫查詢數據。
3. 如何避免緩存雪崩?
針對導致緩存雪崩的原因,有不同的解決方法:
-
針對大量緩存隨機過期時間,解決方法就是在原始過期時間的基礎上,再加一個隨機過期時間,比如1到5分鐘之間的隨機過期時間,這樣可以避免大量的緩存數據在同一時間過期。
-
而針對
Redis
解決宕機的導致的緩存雪崩,可以提前搭建好Redis
的主從服務器進行數據同步,并配置哨兵機制,這樣在Redis
服務器因為宕機而無法提供服務時,可以由哨兵將Redis
從服務器設置為主服務器,繼續提供服務。
二、緩存擊穿
1. 什么是緩存擊穿
緩存擊穿與緩存雪崩的情況相似,雪崩是因為大量的數據過期,而緩存擊穿則是指熱點數據過期,所有針對熱點數據的請求都需要到數據庫中進行處理,如下圖所示:
2. 怎么避免緩存擊穿?
解決緩存擊穿的三種方式:
- 不設置過期時間
如果我們能提前知道某個數據是熱點數據,那么就可以不設置這些數據的過期,從而避免緩存擊穿問題,比如一些秒殺活動的商品,在秒殺時會大量用戶訪問,這時候我們就可以將這些用于秒殺的商品數據提前寫入緩存并且不設置過期時間。
- 互斥鎖
提前知道某些數據會有大量訪問,我們當然可以設置不過期,但