Redis學習筆記(八)Redis快取穿透和雪崩

2021-10-11 18:41:03 字數 1420 閱讀 2154

概念

在預設情況下,使用者請求資料時,會先在快取(redis)中查詢,若沒找到即快取未命中,再在資料庫中進行查詢,數量少可能問題不大,可是一旦大量的請求資料(例如秒殺場景)快取都沒有命中的話,就會全部轉移到資料庫上,造成資料庫極大的壓力,就有可能導致資料庫崩潰。網路安全中也有人惡意使用這種手段進行攻擊被稱為洪水攻擊。

解決方案

1.布隆過濾器對所有可能查詢的引數以hash的形式儲存,以便快速確定是否存在這個值,在控制層先進行攔截校驗,校驗不通過直接打回,減輕了儲存系統的壓力。

2.快取空物件

一次請求若在快取和資料庫中都沒找到,就在快取中方乙個空物件用於處理後續這個請求。

但是這種方法存在兩個問題

儲存空物件也需要空間,大量的空物件會耗費一定的空間,儲存效率並不高。解決這個缺陷的方式就是設定較短過期時間。

即使對空值設定了過期時間,還是會存在快取層和儲存層的資料會有一段時間視窗的不一致,這對於需要保持一致性的業務會有影響。

概念

相較於快取穿透,快取擊穿的目的性更強,乙個存在的key,在快取過期的一刻,同時有大量的請求,這些請求都會擊穿到db,造成瞬時db請求量大、壓力驟增。這就是快取被擊穿,只是針對其中某個key的快取不可用而導致擊穿,但是其他的key依然可以使用快取響應。

「微博熱搜導致伺服器宕機」

解決方案

設定熱點資料永不過期

這樣就不會出現熱點資料過期的情況,但是當redis記憶體空間滿的時候也會清理部分資料,而且此種方案會占用空間,一旦熱點資料多了起來,就會占用部分空間。

加互斥鎖(分布式鎖)

在訪問key之前,採用setnx(set if not exists)來設定另乙個短期key來鎖住當前key的訪問,訪問結束再刪除該短期key。保證同時刻只有乙個執行緒訪問。這樣對鎖的要求就十分高。

概念

大量的key設定了相同的過期時間,導致在快取在同一時刻全部失效,造成瞬時db請求量大、壓力驟增,引起雪崩。(「零點搶購」)

解決方案

Redis 學習筆記(八)事務

更多的資料型別命令可在redis中文官網中查詢和學習,下面學習redis的事務。原子性是指乙個操作或者多個操作,要麼全部執行並且執行的過程不會被任何因素打斷,要麼就都不執行。事務是指一系列操作,這些操作要麼同時成功,要麼同時失敗,它是一種原子操作。事務沒有隔離級別的概念。redis的單條命令都具有原...

Redis學習筆記八 Redis客戶端命令

1 通過安裝目錄下的redis cli命令客戶端,可以連線到redis本地服務。在遠端redis服務上執行命令,使用的也是redis cli命令。windows linux命令的格式 redis cli h host p port a password 連線到主機為127.0.0.1,埠為6379,...

Redis學習筆記 Redis事務

redis事務可以一次執行多個命令 按順序地序列執行,執行中不會被其他命令插入,不許加塞 1.簡介 redis事務可以一次執行多個命令 允許在一次單獨的步驟中執行一組命令 特徵 1 批量操作在傳送exec命令前被放入佇列快取 2 收到exec命令後進入事務執行,事務中任意命令執行失敗,其餘的命令依然...