首頁  >  文章  >  資料庫  >  redis雪崩與穿透如何解決

redis雪崩與穿透如何解決

(*-*)浩
(*-*)浩原創
2019-11-27 10:45:354732瀏覽

redis雪崩與穿透如何解決

快取穿透

快取穿透是指查詢一個一定不存在的數據,由於快取不命中,接著查詢資料庫也無法查詢出結果,因此也不會寫入到快取中,這將會導致每個查詢都會去請求資料庫,造成快取穿透;          (建議學習:Redis視訊教學#)

redis雪崩與穿透如何解決

解決方案

布隆過濾

對所有可能查詢的參數以hash形式存儲,在控制層先進行校驗,不符合則丟棄,從而避免了對底層存儲系統的查詢壓力;

#緩存空對象

當存儲層不命中後,即使傳回的空物件也將其快取起來,同時會設定過期時間,之後再存取這個資料將會從快取中獲取,保護了後端資料來源;

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

如果空值能夠被快取起來,這就意味著快取需要更多的空間儲存更多的鍵,因為這當中可能會有很多的空值的鍵;

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

快取雪崩

快取雪崩是指,由於快取層承載大量請求,有效的保護了儲存層,但是如果快取層由於某些原因整體不能提供服務,於是所有的請求都會達到儲存層,儲存層的呼叫量會暴增,造成儲存層也會掛掉的情況。

redis雪崩與穿透如何解決

解決方案

#保證快取層服務高可用性

即使個別節點、個別機器、甚至是機房宕掉,依然可以提供服務,例如Redis Sentinel 和Redis Cluster 都實現了高可用。 

依賴隔離元件為後端限流並降級

#在快取失效後,透過加鎖或佇列來控制讀取資料庫寫入快取的執行緒數。例如對某個key只允許一個線程查詢資料和寫入緩存,其他線程等待。

資料預熱

可以透過快取reload機制,預先去更新緩存,再即將發生大並發存取前手動觸發載入快取不同的key,設定不同的過期時間,讓快取失效的時間點盡量均勻。

更多Redis相關技術文章,請造訪Redis入門教學欄位學習!

以上是redis雪崩與穿透如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn