Redis-16Redis备份(持久化)
文章目錄
- 概述
- Redis持久化的默認配置
- Redis兩種持久化方式的配置
- RDB 快照的原理及配置
- AOF追加文件的配置
概述
在 Redis 中存在兩種方式的備份 :
- RDB 快照(snapshotting), 它是備份當前瞬間 Redis在內存中的數據記錄。Redis的默認方式。采用RDB持久化時服務器只會保存一個RDB文件,方便維護。
- AOF 只追加文件( Append-Only File , AOF ) , 其作用就是當 Redis執行寫命令后,在一定的條件下將執行過的寫命令依次保存在 Redis 的文件中 , 將來就可以依次執行那些保存的命令恢復 Redis 的數據了。
-
對于RDB 快照備份而言, 如果當前 Redis 的數據量大,備份可能造成 Redis 卡頓,但是恢復重啟是 比較快速的
-
對于 AOF 備份而言,它只是追加寫入命令,所以備份一般不會造成 Redis 卡頓 , 但是恢復重啟要執行更多 的命令,備份文件可能也很大 , 這是要注意的地方
-
在 Redis 中允許使用其中的一種、同時使用兩種,或者兩種都不用,所以具體使用何種方式進行備份和持久化是用戶可以通過配置決定的
Redis持久化的默認配置
################################ SNAPSHOTTING ################################save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbchecksum yes dbfilename dump.rdb############################## APPEND ONLY MODE ############################## appendonly no appendfilename "appendonly.aof" # appendfsync always appendfsync everysec # appendfsync no .. no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yesRedis兩種持久化方式的配置
RDB 快照的原理及配置
RDB 快照原理:redis主進程fork一個子進程,fork出來的子進程將內存的數據集dump到臨時的RDB中,當子進程對臨時的RDB文件寫入完畢,redis用新的RDB文件代替舊的RDB文件。
save 900 1 save 300 10 save 60 10000
這 3 個配置項的含義分別為 :
- 當 900 秒執行 1 個寫命令時,啟用快照備份。
- 當 300 秒執行 10 個寫命令時,啟用快照備份 。
- 當 60 秒內執行 10000 個寫命令時,啟用快照備份。
上面的配置的意思是,當你重啟服務器時數據是可能會丟失的,如果數據量小的時候,你會丟失5分鐘以內的數據;如果數據量大的時候,你會丟失一分鐘以內的數據。如果想避免這種情況發生,那么可以save后重啟服務器。一般我們都是應對突發狀況,所以手工執行是比較雞肋的做法。
stop-writes - on-bgsave- error yes
Redis 執行 save 命令的時候,將禁止寫入命令。
bgsave 命令,它是一個異步保存命令,也就是系統將啟動另外一條進程,
把 Redis 的數據保存到對應的數據文件中 。它和 save 命令最大的不同是它不會阻塞客戶端的寫入,也就是在執行 bgsave 的時候,允許客戶端繼續讀/寫 redis。
在默認情況下,如國Redis 執行 bgsave 失敗后, Redis 將停止接受寫操作,這樣以一種強硬的方式讓用戶知道數據不能正確的持久化到磁盤 , 否則就會沒人注意到災難的發生,如果后臺保存進程重新啟動工作了, Redis 也將自動允許寫操作。然而如果安裝了靠譜的監控,可能不希望 Redis 這樣做,那么你可以將其修改為 no 。
rdbchecksum yes
這個命令意思是是否對 rbd 文件進行檢驗,如果是將對 rdb 文件檢驗。從 dbfilename
的配置可 以知道, rdb 文件實際是 Redis 持久化的數據文件 。
dbfilename dump.rdb
它是數據文件。當采用快照模式備份(持久化)時, Redis 將使用它保存數據,將來可以使用它恢復數據 …
AOF追加文件的配置
appendonly no如果 appendonly 配置為 no,則不啟用 AOF 方式進行備份。如果 appendonly 配置為 yes,則以 AOF 方式備份 Redis 數據,那么此時 Redis 會按照配置,在特定的時候執行追加命令,用以備份數據。
appendfilename "appendonly.aof"
這里定義追加 的寫入文件為 appendonly.aof, 采用 AOF 追加文件備份的時候命令都會寫到這里。
# appendfsync always appendfsyn everysec # appendfsync no
- AOF 文件和 Redis 命令是同步頻率的 , 假設配置為 always , 其含義為當 Red is 執行命令的時候,則 同時同步到 AOF 文件 , 這樣會使得 Redis 同步刷新 AOF 文件, 造成緩慢。
- 采用 no 的時候,則 由客戶端調用命令執行備份, Redis 本身不備份文件。
- 對于采用 always 配置的時候 , 每次命令都會持久化,它的好處在于安全,壞處在于每次都持久化性能較差。采用 eva可sec 則每秒同步 , 安全性不如 always , 備份可能會丟失1秒 以內的命令 , 但是隱患也不大 , 安全度 尚可,性能可以得到保障。采用 no , 則性能有所保障 , 但是由于失去備份, 所 以安全性 比較差。建議采用默認配置everysec , 這樣在保證性能的同時,也在一定程度上保證了 安全性。
no-appendfsync-on-rewrite no
它指定是否在后臺 AOF 文件 rewrite (重寫)期間調用 fsync , 默認為 no , 表示要調用fsync (無論后臺是否有子進程在刷盤)。 Redis 在后臺寫 RDB 文件或重寫 AOF 文件期間會存在大量磁盤I/O , 此時, 在某些 Linux 系統中 ,調用 fsync 可能會阻塞。
auto-aof-rewrite- percentage 100
它指定 Redis 重寫 AOF 文件的條件 , 默認為 100,表示與上次 rewrite 的 AOF 文件大小相比,當前 AOF 文件增長量超過上次 AOF 文件大小的 100%時,就會觸發 backgroundrewrite 。若配置為 0 , 則會禁用自動 rewrite 。
auto-aof-rewrite-min-size 64mb
它指定觸發 rewrite 的 AOF 文件大小 。若 AOF 文件小于該值,即使當前文件的增量比例達到 auto-aof-rewrite-percentage 的配置值,也不會觸發自動 rewrite 。即這兩個配置項同時滿足時,才會觸發 rewrite.
aof- load- truncated yes
Redis 在恢復時會忽略最后一條可能存在 問題的指令 , 默認為 yes 。 即在 AOF 寫入時,可能存在指令寫錯的問題(突然斷 電、寫了一半) , 這種情況下 yes 會 log 并繼續,而 no會直接恢復失敗 。
總結
以上是生活随笔為你收集整理的Redis-16Redis备份(持久化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis-15Redis基础配置文件
- 下一篇: Redis-17Redis内存回收策略