由於Redis的資料都存放在記憶體中,如果沒有配置持久化,redis重啟後資料就全遺失了,於是需要開啟redis的持久化功能,將資料儲存到磁碟上,當redis重啟後,可以從磁碟中恢復資料。
redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在記憶體中的資料庫記錄定時dump到磁碟上的RDB持久化),另一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入檔案)。
RDB:RDB持久化是把目前進程資料產生快照儲存到硬碟的過程,觸發RDB持久化過程分為手動觸發和自動觸發。 (推薦學習:Redis影片教學)
觸發機制
手動觸發分別對應save和bgsave指令
#。
#save指令:阻塞目前Redis伺服器,知道RDB過程完成為止,對於記憶體比較大的實例會造成長時間阻塞,線上不建議使用。
DB saved on diskbgseve指令:Redis程序執行fork操作建立子程序,RDB持久化過程有子程序負責,完成後自動結束。阻塞只發生在fork階段,一般時間很短。
* Background saving started by pid 3151 * DB saved on disk * RDB: 0 MB of memory used by copy-on-write * Background saving terminated with success
自動觸發
以下場景下會觸發
1)使用save相關配置,如“save m n”。表示m秒內資料集存在n次修改時,自動觸發bgsave。
3)執行debug reload指令重新載入Redis時,也會自動觸發save操作。
######4)預設執行shutdown指令時,如果沒有開啟AOF持久化功能則會自動執行bgsave。 ############AOF:###以獨立日誌的方式記錄每次寫入命令,重啟時在重新執行AOF檔案中的命令達到恢復資料的目的。主要作用:解決了資料持久化的即時性。 #########使用AOF#########開啟AOF功能需要設定設定:appendonly yes,預設不開啟。檔案名稱透過appendfilename配置設置,預設為appendonly.aof。 ###############1)所有的寫入指令會追加到aof_buf(緩衝區)。 ######2)AOF緩衝區根據對應的策略向硬碟做同步操作。 #########3)隨著AOF檔案越來越大,需要定期對AOF檔案進行重寫,以達到壓縮的目的。 #########4)當Redis伺服器重新啟動時,可以載入AOF檔進行資料恢復。 ######更多Redis相關技術文章,請造訪###Redis入門教學###欄位學習! ###以上是redis如何持久化的詳細內容。更多資訊請關注PHP中文網其他相關文章!