redis提供兩種方式進行持久化,一種是rdb持久化(原理是將reids在內(nèi)存中的數(shù)據(jù)庫記錄定時dump到磁盤上的rdb持久化),另外一種是aof(append only file)持久化(原理是將reids的操作日志以追加的方式寫入文件)。
RDB持久化是指在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,實際操作過程是fork一個子進程,先將數(shù)據(jù)集寫入臨時文件,寫入成功后,再替換之前的文件,用二進制壓縮存儲。(推薦學習:Redis視頻教程)
AOF持久化以日志的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。
RDB持久化和AOF持久化的區(qū)別:
1、存儲數(shù)據(jù)
RDB持久化保存鍵空間的所有鍵值對(包括過期字典中的數(shù)據(jù)),并以二進制形式保存,符合rdb文件規(guī)范,根據(jù)不同數(shù)據(jù)類型會有不同處理。
AOF持久化保存redis服務器所執(zhí)行的所有寫命令來記錄數(shù)據(jù)庫狀態(tài),在寫入之前命令存儲在aof_buf緩沖區(qū)。
2、持久化時間選擇
RDB持久化通過conf的save選項設置持久化行為(單位時間內(nèi)的修改次數(shù))。
AOF持久化通過conf的appendfsync選項設置持久化行為(單位時間內(nèi)的修改次數(shù))。
3、數(shù)據(jù)還原
RDB持久化:服務器載入rdb文件,阻塞線程,在載入完成之前不接受任何命令。
AOF持久化:服務器創(chuàng)建不帶網(wǎng)絡連接的偽客戶端,讀取aof文件中的所有命令并執(zhí)行(redis服務開啟aof持久化在服務器啟動時會選擇aof文件恢復數(shù)據(jù)庫狀態(tài))
4、過期鍵
RDB持久化在寫入或讀取時會忽略過期鍵
AOF持久化不會忽略過期鍵,在鍵被惰性刪除或定期刪除時向aof文件追加一條刪除命令
5、文件大小
RDB持久化隨著存儲數(shù)據(jù)量的變化而變化(根據(jù)不同數(shù)據(jù)類型有不同的數(shù)據(jù)壓縮優(yōu)化)
AOF持久化隨著執(zhí)行命令的增加而增加(通過aof重寫進行優(yōu)化)
更多redis相關技術知識,請訪問Redis視頻教程欄目學習!