---恢復內容開始---
RDB:在指定的時間間隔對redis中的數據進行快照存儲,默認開啟
AOF:記錄每次操作redis的命令,將命令寫入到AOF文件中,當重啟redis時會重新執行這些命令來恢復數據,默認關閉。
RDB方式:
Redis會根據redis.conf配置文件定期將數據快照至一個RDB文件中:
save [seconds] [changes]:意為每seconds秒內如果數據有changes次修改,那么就進行一次rdb快照存儲。可配置多條save指令,讓redis執行多級的快照保存策略。
RDB工作原理:RDB持久化是指在指定的時間間隔內對內存中的數據進行一次快照存儲,寫入本地磁盤中。實際操作過程是先fork一個子進程,再將數據寫入到一個臨時文件中,寫入成功后,再將之前的文件替換,用二進制壓縮存儲的。RDB是redis默認的持久化方式,會在對應的目錄下產生一個dump.rdb的文件,重啟redis會加載這個dump.rdb文件,恢復原始數據。
RDB的觸發分為兩種:手動觸發和自動觸發。
手動觸發可以是:
save: 該命令會阻塞redis,在sava期間,不能執行其他命令,直到持久化完成。
bgsave:該命令不會阻塞redis,在后台進行的。該觸發方式會fork一個子進程,由子進程負責持久化,因此阻塞只會發生在fork子進程的時候。
自動觸發:
save m n:根據redis配置文件配置規則自動觸發。
從節點全量復制時,主節點發送一個rdb文件給從節點完成復制操作時,主節點會觸發bgsave。
執行debug reload時自動觸發RDB持久化。
執行shutdown時,若沒有開啟aof 也會觸發RDB持久化。
注意:fork操作會阻塞redis,導致redis讀寫性能下降,我們可以通過控制單個redis實例的最大內存,來盡可能降低fork時的消耗。也可通過減少自動觸發的頻率,減少fork次數。
RDB優點:
對性能影響最小:因為它會fork一個子進程來完成持久化操作,幾乎不影響redis處理客戶端請求的效率。
他可以按照每小時,每分鍾,每天來進行快照存儲,可以作為一種可靠的災難恢復手段。
數據恢復比AOF要快很多。
RDB缺點 :
如果更新數據后,還沒來得及持久化,redis就宕機了,那么更新的數據就會丟失。
如果redis中的數據非常多且CPU處理能力不足的情況下,在fork子進程的時候就會消耗更長的時間,這時若對redis進行額外的操作的話,redis處理這個操作的時間就更長。
AOF方式:
- AOF工作原理
采用AOF持久方式時,Redis會把每一個寫請求都記錄在一個日志文件里。在Redis重啟時,會把AOF文件中記錄的所有寫操作順序執行一遍,確保數據恢復到最新。
AOF的整個流程大體分為兩步,一步是命令的實時寫入(如果是 appendfsync everysec
配置,會有1s損耗),第二步是對aof文件的重寫(重寫是直接把當前內存的數據生成對應命令)。
對於增量追加到文件這一步主要的流程是:命令寫入=》追加到aof_buf =》同步到aof磁盤。那么這里為什么要先寫入buf在同步到磁盤呢?如果實時寫入磁盤會帶來非常高的磁盤IO,影響整體性能。
aof重寫的目的是為了減少aof文件的大小,可以手動或者自動觸發。
手動觸發: bgrewriteaof
,自動觸發 就是根據配置規則來觸發。
- AOF如何配置:
AOF默認是關閉的,如要開啟,進行如下配置:appendonly yes。AOF提供了三種fsync配置,always/everysec/no,通過配置項[appendfsync]指定:
appendfsync no:不進行fsync,將flush文件的時機交給OS決定,速度最快
appendfsync always:每寫入一條日志就進行一次fsync操作,數據安全性最高,但速度最慢
appendfsync everysec:折中的做法,交由后台線程每秒fsync一次
隨着AOF不斷地記錄寫操作日志,因為所有的操作都會記錄,所以必定會出現一些無用的日志。大量無用的日志會讓AOF文件過大,也會讓數據恢復的時間過長。不過Redis提供了AOF rewrite功能,可以重寫AOF文件,只保留能夠把數據恢復到最新狀態的最小寫操作集。
AOF rewrite可以通過BGREWRITEAOF命令觸發,也可以配置Redis定期自動進行:
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
上面兩行配置的含義是,Redis在每次AOF rewrite時,會記錄完成rewrite后的AOF日志大小,當AOF日志大小在該基礎上增長了100%后,自動進行AOF rewrite。同時如果增長的大小沒有達到64mb,則不會進行rewrite。
AOF的優點:
最安全,在啟用appendfsync always時,任何已寫入的數據都不會丟失,使用在啟用appendfsync everysec也至多只會丟失1秒的數據。
AOF文件在發生斷電等問題時也不會損壞,即使出現了某條日志只寫入了一半的情況,也可以使用redis-check-aof工具輕松修復。
AOF文件易讀,可修改,在進行了某些錯誤的數據清除操作后,只要AOF文件沒有rewrite,就可以把AOF文件備份出來,把錯誤的命令刪除,然后恢復數據。
AOF的缺點:
AOF文件通常比RDB文件更大
性能消耗比RDB高
數據恢復速度比RDB慢
---恢復內容結束---