緩存雪崩前端
數據沒有加載到緩存或者緩存存在大範圍失效,致使全部請求都要訪問數據庫,致使數據庫CPU和內存過載甚至致使數據庫沒法響應請求和系統崩潰。數據庫
緩存雪崩的過程緩存
Redis集羣大面積故障,但仍然有大量的請求訪問緩存訪問,因爲緩存失敗,大量的請求則轉向數據庫如MySQL,MySQL不能快速作出相應或者中止工做。因爲大量的應用依賴MySQL和Redis,它將會致使服務器集羣崩潰。最終應用(網站)將測底癱瘓。服務器
解決方案微信
高可用緩存 Redis Sentinel和Redis Cluster 都是高可用的,以防止大量的緩存失敗。即便,單獨的節點甚至區域機房都關閉,仍然能夠提供服務 。併發
Redis Sentinel除了提供高可用還提供其餘附屬任務,如監控,通知。 緩存降級 降級是保證核心服務可用,當訪問量急劇增長而且分佈式緩存不可用時,服務降級,訪問本地緩存是主要的解決方案。系統可用預先設置好的關鍵數據進行自動降級或者經過配置開關實現手動降級,手動降級須要運維或者開發的配合。運維
例如,在推薦系統中,有不少個性化需求,若是個性化需求不能提供服 務,可 以經過降級來補充熱門數據,以免在前端頁面產生大量的空白。分佈式
服務降級方案,須要提早梳理哪些是核心業務必須保證正常服務,哪些業務可 以臨時不提供服務,使用靜態頁面替換,還要評估服務器的核心指標以及設置後 總體方案。
複製代碼
Redis備份和快速預熱 緩存滲透
緩存滲透是指在Redis中沒有命中,則請求就會轉發到MySQL數據進行查詢。若是MySQL裏面也沒查詢到數據就很差寫緩存。這將致使不存在的數據每次請求都要查詢數據庫。網站
解決方案spa
若是數據庫查詢的數據爲空,能夠設置個默認的值存儲到緩存中,以便第二次請求從緩存獲取值而不繼續訪問數據庫。須要對設置的默認值設置過時時間或者在數據庫查詢到的值時替換緩存的默認值。也能夠爲Key設置寫規則,在查詢前過濾不規則的Key。
複製代碼
緩存併發 多個Redis客戶端同時設置Key的值致使的併發性問題。
解決方案
Redis是單線程的,具備epoll / kqueue,而且在I / O併發方面能夠無限擴展。固然,另外一個解決方案是序列化Redis。在隊列中逐個設置操做
緩存預熱 緩存預熱是在系統聯機後把相關的數據直接加載到緩存中,客戶端請求直接查詢在緩存的數據。避免先查詢數據再寫緩存的問題。
解決方案
在前端作刷新緩存的功能並在聯機時手動操做;或者在系統啓動時自動把數據加載到緩存,當數據量不大的的時候能夠這樣作。
如何加載大量數據集到Redis中,例如數十億個鍵?Redis 2.6的版本後能夠利用 pipe mode 。
微信公衆號同步