redis持久化方案分為RDB和AOF兩種。
RDB持久化可以手動執行也可以根據設定定期執行,它的作用是將某個時間點上的資料庫狀態儲存到RDB檔案中,RDB檔案是一個壓縮的二進位文件,透過它可以還原某個時刻資料庫的狀態。由於RDB檔案是保存在硬碟上的,所以即使redis崩潰或退出,只要RDB檔案存在,就可以用它來恢復還原資料庫的狀態。
可以透過SAVE或BGSAVE來產生RDB檔。
SAVE指令會阻塞redis進程,直到RDB檔案產生完畢,在進程阻塞期間,redis不能處理任何指令要求,這顯然是不合適的。
BGSAVE則是會fork出一個子進程,然後由子進程去負責產生RDB文件,父進程還可以繼續處理命令請求,不會阻塞進程。
AOF和RDB不同,AOF是透過保存redis伺服器所執行的寫入指令來記錄資料庫狀態的。
AOF透過追加、寫入、同步三個步驟來實現持久化機制。
當AOF持久化處於啟動狀態,伺服器執行完寫指令之後,寫入指令將會被追加append到aof_buf緩衝區的結尾
在伺服器每結束一個事件循環之前,將會呼叫flushAppendOnlyFile函數決定是否要將aof_buf的內容儲存到AOF檔案中,可以透過設定appendfsync來決定。
always ##aof_buf内容写入并同步到AOF文件 everysec ##将aof_buf中内容写入到AOF文件,如果上次同步AOF文件时间距离现在超过1秒,则再次对AOF文件进行同步 no ##将aof_buf内容写入AOF文件,但是并不对AOF文件进行同步,同步时间由操作系统决定
如果不設置,預設選項將會是everysec,因為always來說雖然最安全(只會遺失一次事件循環的寫入命令),但是效能較差,而everysec模式只不過會可能遺失1秒鐘的數據,而no模式的效率和everysec相仿,但是會遺失上次同步AOF檔之後的所有寫指令資料。
以上是redis中持久化方案有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!