Redis之持久化和主從同步


  Redis作為內存數據庫,所有數據都保存在內存中, 一旦程序停止工作, 數據都將丟失. 需要我們重新從其他地方加載數據. 不過Redis提供了兩種方式保存Redis中的數據一種是dump內存直接存入rdb文件中,一種是存在aof文件中,aof文件存儲的是一條一條存儲和修改數據的命令,類似於mysql的二進制日志形式。

  rdb文件格式由於直接dump內存數據結構,因此重新加載rdb文件速度更快,直接將文件內容讀入內存中即可。Redis進行主從同步時,首先slave連接上master,master創建一個進程,將內存中的數據存儲為rdb格式到磁盤上,然后通過網絡將文件數據發送至slave,rdb文件生成和傳輸過程中,客戶端對master進行的修改都以一條條的命令保存在內存中,rdb文件傳輸完畢,再將這些命令傳遞給slave執行。如果參數repl-diskless-sync設置了值,則master創建一個進程不會將數據存儲在磁盤中,而是直接發送給slave,其他操作一致。

  如果同時有幾個slave連接到master上,則master同時只會創建一個進程將內存中數據dump到磁盤上,因此Redis建議如果一台機器上只有一個Redis實例,則設置的最大內存物理內存的一般左右,確保fork新的進程時,不會將物理內存耗光,導致程序崩潰。

  如果客戶端修改master上面數據,則master會將命令同步給slave節點,大部分時候slave連接master所有的數據都會重新同步一次,如果master和slave網絡斷開時間不長,slave重新連接master,slave會首先發送一個上次同步位置的psync命令,master驗證psync命令中同步位置有效,則master不會要求slave同步所有數據,而是從slave發送的位置開始同步,psync命令中同步位置一旦無效,master會要求slave同步所有的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM