標籤:redis
1、Redis 支援兩種方式的持久化,一種是RDB , 一種是AOF 。可用單獨使用也可以二者結合使用。
2、RDB A、RDB方式是Redis預設採用的持久化方式,通過快照(snapshotting)完成的。當符合一定條件時Redis會自動將記憶體中的所有資料進行快照並儲存在整個硬碟上。進行快照的條件:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。 B、設定檔中已經預先設定了3個條件: save 900 1 save 300 10
save 60 10000
C、save參數指定了快照條件,可以存多個條件,條件之間是“或”的關係。 如上,在900秒內至少一個鍵被更改就進行快照。時間單位是秒
D、Redis預設會將快照檔案儲存體在目前的目錄的dump.rdb檔案中,也可以通過 dir 和 dbfilename 兩個參數分別指定快照檔案的儲存路徑和檔案名稱。
E、Redis實現快照的過程: 1)Redis使用fork函數複製一份當前進程(父進程)的副本(子進程) 2)父進程繼續接受並處理用戶端發來的命令,而子進程開始將記憶體中的資料寫入硬碟中的臨時檔案
3)當子進程寫入完所有資料後,會用該臨時檔案替換舊的RDB檔案,至此一次快照操作完成。
F、在執行fork的時候作業系統會使用寫時複製(copy-on-write)策略,即fork()函數發生的那一刻父子進程共用同一記憶體空間,當父進程要更改某一片的資料時(如執行寫命令),作業系統會將該片資料複製一份以保證子進程的資料不受影響,所以新的RDB檔案儲存體的是fork()那一刻的記憶體資料。
G、Redis是在快照結束後才會將舊的RDB檔案替換成新的,也就是說任何時候RDB檔案都是完整的。這時我們就可以通過備份RDB檔案來實現Redis資料的備份。 H、RDB檔案是經過壓縮的二進位格式,所以佔用的空間小於記憶體中的資料大小,更加利於傳輸。也可以設定redcompression參數以禁用壓縮。
I、手動Redis執行快照命令:SAVE \ BGSAVE ,區別是:前者是由主進程進行快照操作,會阻塞住其他請求,後者會通過fork子進程進行快照操作。 J、Redis啟動後會讀取RDB快照檔案,將資料從硬碟載入記憶體。
K、RDB方式持久化資料,一旦Redis異常退出,就會失去最後一次快照以後更改的資料。如果資料很重要以至於無法承受任何損失,可以使用AOF進行持久化。
八、Redis 基礎命令---管理--持久化--RDB