redis 異常前端
緩存雪崩
緩存穿透
緩存擊穿
緩存預熱
緩存降級redis
1. 緩存雪崩是指緩存同一時間大面積的失效,因此,後面的請求都會落到數據庫上,形成數據庫短期內承受大量請求而崩掉。數據庫
解決方案緩存
緩存數據的過時時間設置隨機,防止同一時間大量數據過時現象發生。
通常併發量不是特別多的時候,使用最多的解決方案是加鎖排隊。
給每個緩存數據增長相應的緩存標記,記錄緩存的是否失效,若是緩存標記失效,則更新數據緩存。數據結構
2.緩存穿透
緩存穿透是指緩存和數據庫中都沒有的數據,致使全部的請求都落到數據庫上,形成數據庫短期內承受大量請求而崩掉。併發
解決方案運維
接口層增長校驗,如用戶鑑權校驗,id作基礎校驗,id<=0的直接攔截;
從緩存取不到的數據,在數據庫中也沒有取到,這時也能夠將key-value對寫爲key-null,緩存有效時間能夠設置短點,如30秒(設置太長會致使正常狀況也無法使用)。這樣能夠防止攻用戶反覆用同一個id暴力攻
採用布隆過濾器,將全部可能存在的數據哈希到一個足夠大的 bitmap 中,一個必定不存在的數據會被這個 bitmap 攔截掉,從而避免了對底層存儲系統的查詢壓力
3.緩存擊穿
緩存擊穿是指緩存中沒有但數據庫中有的數據(通常是緩存時間到期),這時因爲併發用戶特別多,同時讀緩存沒讀到數據,又同時去數據庫去取數據,引發數據庫壓力瞬間增大,形成過大壓力。和緩存雪崩不一樣的是,緩存擊穿指併發查同一條數據,緩存雪崩是不一樣數據都過時了,不少數據都查不到從而查數據庫。ide
解決方案性能
設置熱點數據永遠不過時。
加互斥鎖,互斥鎖接口
4.緩存預熱就是系統上線後,將相關的緩存數據直接加載到緩存系統。這樣就能夠避免在用戶請求的時候,先查詢數據庫,而後再將數據緩存的問題!用戶直接查詢事先被預熱的緩存數據!
解決方案
直接寫個緩存刷新頁面,上線時手工操做一下;
數據量不大,能夠在項目啓動的時候自動進行加載;
定時刷新緩存;
5. 緩存降級
當訪問量劇增、服務出現問題(如響應時間慢或不響應)或非核心服務影響到核心流程的性能時,仍然須要保證服務仍是可用的,即便是有損服務。系統能夠根據一些關鍵數據進行自動降級,也能夠配置開關實現人工降級。
緩存降級的最終目的是保證核心服務可用,即便是有損的。並且有些服務是沒法降級的(如加入購物車、結算)。
6.熱點數據和冷數據,緩存熱點key
7.Redis 提供兩種持久化機制 RDB(默認) 和 AOF 機制:當兩種方式同時開啓時,數據恢復Redis會優先選擇AOF恢復。
8.Redis有哪些優缺點
優勢
讀寫性能優異, Redis能讀的速度是110000次/s,寫的速度是81000次/s。
支持數據持久化,支持AOF和RDB兩種持久化方式。
支持事務,Redis的全部操做都是原子性的,同時Redis還支持對幾個操做合併後的原子性執行。
數據結構豐富,除了支持string類型的value外還支持hash、set、zset、list等數據結構。
支持主從複製,主機會自動將數據同步到從機,能夠進行讀寫分離。
缺點
數據庫容量受到物理內存的限制,不能用做海量數據的高性能讀寫,所以Redis適合的場景主要侷限在較小數據量的高性能操做和運算上。Redis 不具有自動容錯和恢復功能,主機從機的宕機都會致使前端部分讀寫請求失敗,須要等待機器重啓或者手動切換前端的IP才能恢復。主機宕機,宕機前有部分數據未能及時同步到從機,切換IP後還會引入數據不一致的問題,下降了系統的可用性。Redis 較難支持在線擴容,在集羣容量達到上限時在線擴容會變得很複雜。爲避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源形成了很大的浪費。