標籤:
前面已經總結了Redis 的安裝和使用今天講下Redis 的持久化。
redis跟memcached類似,都是記憶體資料庫,不過redis支援資料持久化,也就是說redis可以將記憶體中的資料同步到磁碟來持久化,以確保redis 的資料安全。
redis持久化的兩種方式
redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)。
RDB,簡而言之,就是將儲存的資料快照的方式儲存到磁碟上,
AOF,則是將redis執行過的所有寫指令記錄下來,通過write函數追加到AOF檔案的末尾。在下次redis重新啟動時,只要把這些寫指令從前到後再重複執行一遍,就可以實現資料恢複了。
其實RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先採用AOF方式來進行資料恢複,這是因為AOF方式的資料恢複完整度更高。
如果你沒有資料持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis將變成一個純記憶體資料庫,就像memcache一樣。
RDB
RDB(Redis DataBase),是將redis某一時刻的資料持久化到磁碟中,是一種快照式的持久化方法。預設的檔案名稱為dump.rdb。
redis在進行資料持久化的過程中,會先將資料寫入到一個臨時檔案中,待持久化過程都結束了,才會用這個臨時檔案替換上次持久化好的檔案,以確保資料完整可用。
save 300 10 #300秒內容如超過10個key被修改,則發起快照儲存
不過,由於快照方式是在一定間隔時間做一次的,如果對資料的完整性非常敏感,那麼RDB方式就不太適合你,因為即使你每2分鐘都持久化一次,當redis故障時,仍然會有近2分鐘的資料丟失。所以,redis還提供了另一種持久化方式,那就是AOF。
AOF
AOF(Append Only File),即只允許追加不允許改寫的檔案。
Redis會將收到的每一個寫操作(如SET等)通過write函數追加到AOF檔案的末尾。預設的AOF持久化策略是每秒鐘fsync一次(把緩衝中的寫指令記錄到磁碟中)。
當Redis重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容。
appendonly yes #啟用aof持久化方式 # appendfsync always #每次收到寫命令就立即強制寫入磁碟,最慢的,但是保證完全的持久化,不推薦使用 appendfsync everysec #每秒鐘強制寫入磁碟一次,在效能和持久化方面做了很好的折中,推薦 # appendfsync no #完全依賴os,效能最好,持久化沒保證
但AOF方式是將所有的命令記錄下來,所以AOF檔案要比RDB檔案的體積大。而且,恢複速度也要慢於RDB方式。
redis提供了bgrewriteaof命令,會重建一個全新的AOF檔案,其中便包括了可以恢複現有資料的最少的命令集。
需要注意到是重寫aof檔案的操作,並沒有讀取舊的aof檔案,而是將整個記憶體中的資料庫內容用命令的方式重寫了一個新的aof檔案,這點和快照有點類似。
如何選擇RDB和AOF
對於我們應該選擇RDB還是AOF,取決於具體的應用情境,官方的建議是兩個同時使用。這樣可以提供更可靠的持久化方案。
Redis總結(四)Redis 的持久化