Redis之持久化和主從同步

  Redis做爲內存數據庫,全部數據都保存在內存中, 一旦程序中止工做, 數據都將丟失. 須要咱們從新從其餘地方加載數據. 不過Redis提供了兩種方式保存Redis中的數據一種是dump內存直接存入rdb文件中,一種是存在aof文件中,aof文件存儲的是一條一條存儲和修改數據的命令,相似於mysql的二進制日誌形式。mysql

  rdb文件格式因爲直接dump內存數據結構,所以從新加載rdb文件速度更快,直接將文件內容讀入內存中便可。Redis進行主從同步時,首先slave鏈接上master,master建立一個進程,將內存中的數據存儲爲rdb格式到磁盤上,而後經過網絡將文件數據發送至slave,rdb文件生成和傳輸過程當中,客戶端對master進行的修改都以一條條的命令保存在內存中,rdb文件傳輸完畢,再將這些命令傳遞給slave執行。若是參數repl-diskless-sync設置了值,則master建立一個進程不會將數據存儲在磁盤中,而是直接發送給slave,其餘操做一致。sql

  若是同時有幾個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同步全部的數據。網絡

相關文章
相關標籤/搜索