redis的穿透和雪崩

2021-08-13 14:34:19 字數 788 閱讀 4563

redis穿透:正常的執行路徑是這樣的,請求資料,首先會從redis快取中拿資料,如果快取沒有的話才去查資料庫,再寫到redis快取中。那麼如果有人請求一條根本不存在的資料時,redis裡面肯定沒有嘛,它就會去訪問資料庫,但是資料庫沒有,所以它也沒把資料寫回redis快取。所以它每次請求這個資料的時候它就會直接去訪問資料庫。如果請求的數量太大的話,都直接穿過redis直接去訪問資料庫,資料庫承受不了這個訪問數量。

解決辦法:在redis裡面用乙個set集來把資料庫查詢的那個查詢主鍵都讀出來存到這個set集裡面。如果有請求時,先查redis裡面的set有沒有這個主鍵,如果沒有就直接返回,不查資料庫。如果有的話查redis,如果沒有的話才去查資料庫並把資料庫裡的資料寫到快取中。

判斷元素是否在集合中,無論集合中有多少元素都可以極速的返回結果。

sismember key member

127.0.0.1:6379> sismember set a

(integer) 1

127.0.0.1:6379> sismember set h

(integer) 0

redis雪崩:每個key(即資料)如果設定了失效時間的話,如果大量key同時過期的時候,這些key又大量地去請求這些key時,因為redis裡面沒有這些資料,就會大量的請求就會大量湧向資料庫,就會導致資料庫處理不過來,導致「雪崩」。

解決辦法:在設定失效時間的時候,給它加乙個隨機的秒數(0~60),來讓這些大量的資料進行錯開對資料庫的訪問。這樣資料庫就能應付過來了。如果這個key的訪問頻率頻繁的時候,我們可以讓它每查一次就給它加點有效時間。這樣就能解決雪崩問題了

Redis 穿透和雪崩

就是訪問redis中乙個不存在的key的時候,會直接穿過快取,去資料庫中進行查詢.如果是黑客,進行惡意攻擊的時候,每次都請求超過2000個 秒的時候,這個時候mysql基本上就掛了.解決辦法是 每次從資料庫中查詢到乙個不存在的key的時候,就寫乙個空值到快取庫中,有惡意攻擊的時候,直接從快取中取到這...

Redis雪崩和Redis穿透

redis雪崩 查詢時redis沒有資料本來先從redis裡面查某個資料 但是redis中這個資料剛好被刪除了,還沒來得及更新 一瞬間很多請求直接進入了mysql進行查詢 而mysql承受不了太大壓力,就會出現雪崩redis穿透 跳過我們預想的資料本來先從redis裡面查某個資料 但是redis中沒...

Redis的雪崩和穿透

redis穿透 正常的執行路徑是這樣的,請求資料,首先會從redis快取中拿資料,如果快取沒有的話才去查資料庫,再寫到redis快取中。那麼如果有人請求一條根本不存在的資料時,redis裡面肯定沒有嘛,它就會去訪問資料庫,但是資料庫沒有,所以它也沒把資料寫回redis快取。所以它每次請求這個資料的時...