首頁 > 資料庫 > Redis > 主體

redis雪崩是什麼

青灯夜游
發布: 2019-06-17 16:51:18
原創
5646 人瀏覽過

什麼是redis的雪崩?下面這篇文章就來給大家簡單介紹一下,希望對你們有幫助。

redis雪崩是什麼

什麼是雪崩?

因為快取層承載了大量的請求,有效的保護了儲存層,但是如果快取由於某些原因,整體不能夠提供服務,於是所有的請求,就會到達儲存層,儲存層的呼叫量就會暴增,造成儲存層也會掛掉的情況。緩存雪崩的英文解釋是奔逃的野牛,指的是緩存層當掉之後,並發流量會像奔騰的野牛一樣,大量訪問後端存儲。

快取雪崩通俗簡單的理解就是:由於原有快取失效(或資料未載入到快取中),新快取未到期間(快取正常從Redis中獲取,如下圖)所有原本應該存取快取的請求都去查詢資料庫了,而對資料庫CPU和記憶體造成巨大壓力,嚴重的會造成資料庫宕機,造成系統的崩潰。

redis雪崩是什麼

快取失效的時候如下圖:

redis雪崩是什麼

#有這種問題的一個場景是:當快取伺服器重新啟動或大量快取集中在某一個時間段失效,這樣在失效的時候,大量資料會去直接存取DB,此時給DB很大的壓力。

快取失效時的雪崩效應對底層系統的衝擊非常可怕!那有什麼辦法可以解決這個問題呢?

解決方法

1)、設定redis集群和DB集群的高可用,如果redis出現宕機情況,可以立即由別的機器頂替上來。這樣可以防止一部分的風險。

2)、使用互斥鎖

在快取失效後,透過加鎖或佇列來控制讀取和寫入資料庫的執行緒數量。例如:對某個key只允許一個執行緒查詢資料和寫入緩存,其他執行緒等待。單機的話,可以使用synchronized或lock來解決,如果是分散式環境,可以是用redis的setnx指令來解決。

3)、不同的key,可以設定不同的過期時間,讓快取失效的時間點不一致,盡量達到平均分佈。

4)、永遠不要過期

redis中設定永久不過期,這樣就保證了,不會出現熱點問題,也就是物理上不過期。

5)、資源保護

使用netflix的hystrix,可以做各種資源的執行緒池隔離,進而保護主執行緒池。

以上是redis雪崩是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板