redis常見問題分析

1. 如何保證redis高可用和高併發

redis主從架構,一主多從,能夠知足高可用和高併發。出現實例宕機自動進行主備切換,配置讀寫分離緩解master讀寫壓力。node

2. redis高可用具體怎麼實施

建議使用官方的哨兵機制,當主節點出現故障,由Sentinel自定完成故障發現和轉移,並通知應用方,實現高可用性。redis

它主要有4個功能:

  • 集羣監控:負責監控redis master和slave進程是否正常工做;
  • 消息通知:若是某個redis實例有故障,那麼哨兵負責發送報警通知給管理員;
  • 故障轉移:若是master-node掛掉了,會自動轉移到slave-node;
  • 配置中心:若是故障轉移發生了,通知client客戶端新的master地址。

3. 哨兵機制的原理

經過sentinel模式啓動redis後,自動監控master/slave運行情況。基本原理是:心跳檢測和投票裁決。算法

每一個sentinel會向其餘sentinel、master、slave定時發送消息,若是在指定時間內沒有迴應,則暫時認爲對方宕機。網絡

若是哨兵羣組中多數sentinel都報告某一節點沒有響應,纔會認爲該節點真正宕機。經過Raft投票算法,從剩下的slave節點中選出一臺提高爲新的matser,而後自動修改相關配置。架構

4. redis哨兵部署須要注意什麼

至少3個實例,以保證羣組的健壯性。併發

5. redis主從架構會丟失數據嗎?爲何

  • 異步複製致使的數據丟失:由於master->slave數據複製是異步的,在異步複製前,若是master就宕機了,那後面即將複製的數據就丟失了。
  • 腦裂致使的數據丟失:某個master所在的機器脫離了正常的網絡,致使slave鏈接不上master,實際上master還在運行着。但哨兵認爲master已經失去鏈接,而且從新選取了一個slave提高爲master,這會集羣中就會出現2個master節點。但client客戶端還沒來得及切換到新的master節點,依舊會把數據寫入舊的master中。那當舊的master恢復正常的時候,會被當作一個slave節點掛倒新的master下面,原數據會被清空,從新重新的master複製一份數據。

6. redis主從複製的原理

  • 一個slave實例,不管是第一次鏈接仍是重連到master,都會發出SYNC命令;
  • master收到請求後,會作兩件事:a)master執行BGSAVE,即在後臺保存數據到硬盤(rdb快照);b)master同時將新收到的寫入和修改命令存入緩衝區(非查詢類);
  • master在將數據存入硬盤文件成功後,將這個快照文件發送給slave,slave收到快照後會會清空內存,加載這個文件到內存中;
  • master也會將緩衝區的命令,以redis命令協議的形式轉發給slave,slave執行這些命令,實心和master的同步;
  • master/slave此後會不斷經過異步的方式進行命令同步,達到最終的數據同步一致。

7. redis過時策略有哪些

  • 惰性刪除:當讀/寫一個已通過期的key時,會觸發惰性刪除策略,直接刪除掉這個過時的key;
  • 按期刪除:由於惰性刪除沒法保證冷數據及時刪除,因此redis會按期主動淘汰一批過時數據;
  • 主動刪除:當前已用內存超過maxMemory限定時,觸發主動清除策略,主動刪除的前提是設置了maxMemory的值。
相關文章
相關標籤/搜索