Redis的備份(持久化)瞭解

在Redis中存在兩種方式的備份:

  1. 快照:備份當前瞬間Redis在內存中的數據記錄。
  2. 只追加文件:當Redis執行寫命令後,在一定條件下將執行過的寫命令一次保存在Redis的文件中,將來就可以依次執行那些保存的命令恢復Redis的數據。

對於快照而言,如果當前Redis的數據量大,備份可能會造成Redis卡頓,但是恢復重啓是比較迅速的。
對於只追加文件而言,它只是追加寫入命令,所以備份一般不會造成卡頓,但是恢復重啓要執行更多的命令,備份文件可能也很大。

下面我們來談一談它的配置。

對於快照模式的備份而言,它的配置項如下:

save 900 1
save 300 10
save 60 10000

這三個配置的含義分別是:

  • 當900秒執行一個寫命令的時候,啓動快照備份。
  • 當300秒執行10個寫命令的時候,啓動快照備份。
  • 當60秒內執行10000個寫命令時,啓動快照備份。

Redis執行save命令時,將禁止寫入命令。

stop-writes-on-bgsave-error yes

這裏說明一下bgsave命令,它是一個異步保存命令,也就是系統將啓動另一個進程,把Redis的數據保存到對應的數據文件中。它和save命令最大的不同是他不會阻塞客戶端的寫入,也就是在執行bgsave的時候,允許客戶端繼續讀/寫Redis。

rdbchecksum yes

這個命令的意思是是否對rdb文件進行檢驗,如果設置爲是,則是將對rbd文件檢驗,從dbfilename的配置可以知道,rdb文件實際是Redis持久化的數據文件。

dbfilename dump.rdb

它是數據文件。當採用快照模式備份時,Redis將使用它保存數據,將來可以使用它恢復數據。

appendonly no

如果appendonly配置爲no時,則不啓動AOF方式進行備份。如果appendonly配置爲yes時,則以AOF方式備份Redis數據,那麼此時Redis會按照配置,在特定的時候執行追加命令,用以備份數據。

appendfilename "appendonly.aof"

這裏定義追加的寫入文件爲appendonly.aof,採用AOF追加文件備份的時候命令都會寫到這裏。

# appendfsync always
appendfsync everysec
# appendfsync no

AOF文件和Redis命令是同步頻率的,假設配置爲always,其含義就是當Redis執行命令的時候,則同步到AOF文件,這樣會使得Redis同步刷新AOF文件,造成緩慢。
而採用everysec則代表每秒同步一次命令到AOF文件。
採用no的時候,則由客戶端調用命令執行備份,Redis本身不備份文件。

no-appendfsync-on-rewrite no

它指定是否在後臺AOF文件rewrite(重寫)期間調用fsync,默認爲no,表示要調用fsync(無論後臺是否有子進程在刷盤)。

auto-aof-rewrite-min-size 64mb

它指定觸發rewrite的AOF文件大小。若AOF文件小於該值,即使當前文件的增量比例達到auto-aof-rewrite-percentage的配置值,也不會觸發自動rewrite。即這兩個配置項同時滿足時,纔會觸發rewrite。

aof-load-truncated yes

Redis在恢復時會忽略最後一條可能存在問題的指令,默認爲yes。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章