快取沒有生效,大量請求訪問某乙個key的資料 , 實際快取中並不存在該key的快取 , 然後都轉而降級查詢db 去了,最終的結果是db查詢壓力增大。
可能的發生場景
解決辦法快取失效後由於需要重新生成快取,在生成快取的時間內接收到的請求大量請求,引起系統效能驟然下降。
解決辦法
更新鎖機制對快取更新進行加鎖保護,保證只有乙個執行緒能夠進行快取的更新,未能獲取更新鎖的執行緒要麼等待鎖釋放後重新讀取快取,要麼就返回空值或者預設值。
分布式集群的業務系統要實現更新鎖機制,需要使用分布式鎖,如zookeeper。
後台更新機制快取本身的有效期設定為永久,後台執行緒定時更新快取。
後台定時更新機制需要考慮一種情況,當快取系統記憶體不足時需要踢掉一些快取資料,從快取被踢掉,到下一次定時更新快取的這段時間內,業務執行緒讀取快取返回空值,會給人一種資料丟了的感覺,解決方式如下:
後台更新既適合單機多執行緒的情況也適合分布式集群的場景,相比更新鎖機制更簡單一些。後台更新機制還適合業務剛上線的時候快取預熱。
快取預熱是指系統上線後將相關的快取直接載入到快取系統,而不是等待使用者方位才觸發快取載入。雖然快取系統本身的效能比較高,但對於一些特別熱點的資料,如果大部分甚至所有的業務請求都命中同乙份快取資料,則這份資料所在的快取伺服器的壓力也很大。例如,某明星微博發布「我們」來宣告戀愛了,短時間內上千萬的使用者都會來圍觀。
快取熱點的解決方案就是複製多份快取副本,將請求分散到多個快取伺服器上,減輕快取熱點導致的單台快取伺服器壓力
以微博為例,對於粉絲數超過 100 萬的明星,每條微博都可以生成 100 份快取,快取的資料是一樣的,通過在快取的 key 裡面加上編號進行區分,每次讀快取時都隨機讀取其中某份快取。
快取副本設計有乙個細節需要注意,就是不同的快取副本不要設定統一的過期時間,否則就會出現所有快取副本同時生成同時失效的情況,從而引發快取雪崩效應。正確的做法是設定乙個過期時間範圍,不同的快取副本的過期時間是指定範圍內的隨機值。
Redis筆記12 快取穿透 快取擊穿 快取雪崩
使用者想要查詢乙個資料,發現redis記憶體資料庫沒有,也就是快取沒有命中,於是向持久層資料庫查詢。發現也沒有,於是本次查詢失敗。當使用者很多的時候,快取都沒有命中,於是都去請求了持久層資料庫。這會給持久層資料庫造成很大的壓力,這時候就相當於出現了快取穿透。比如,發起乙個id 1的資料庫查詢請求。布...
Redis 熱鍵問題,快取擊穿,快取穿透,快取雪崩
1.熱鍵問題 描述 熱鍵被大量客戶端訪問,導致大量網路流量集中在一台redis伺服器上,伺服器宕機。解決方法 將熱鍵分散到不同的redis伺服器上 2.快取擊穿 描述 熱鍵被大量客戶端訪問,熱鍵如果過期,可能導致大量網路流量打到 db 伺服器上,導致資料庫伺服器宕機 解決方法 對於熱鍵,訪問之前如果...
Redis三大問題 快取穿透 快取擊穿 快取雪崩
快取擊穿 快取雪崩 前台請求,後台先從快取中取資料,取到直接返回結果,取不到時從資料庫中取,資料庫取到更新快取,並返回結果,資料庫也沒取到,直接返回空結果。快取穿透就是當使用者訪問一條資料時,快取和資料庫中都不存在,就會不斷的發起請求。如果使用者是攻擊者,會導致資料庫壓力過大。解決方案 快取空物件 ...