redis配置文件的持久化(詳細對比)

一、redis持久化方式

Redis 提供了兩種持久化方式,一種是基於快照形式的 RDB,另一種是基於日誌形式的 AOF,每種方式都有自己的優缺點。

1.1、RDB持久化的概述

  • RDB 基於內存快照,是 Redis 默認開啓的持久化方式,並不需要我們單獨開啓。

  • RDB 有兩種持久化方式:手動觸發 和 自動觸發,手動觸發使用以下兩個命令:

    • save:會阻塞當前 Redis 服務器響應其他命令,直到 RDB 快照生成完成爲止,對於內存比較大的實例會造成長時間阻塞,所以線上環境不建議使用

    • bgsave:Redis 主進程會 fork 一個子進程,RDB 快照生成有子進程來負責,完成之後,子進程自動結束,bgsave 只會在 fork 子進程的時候短暫的阻塞,這個過程是非常短的,所以推薦使用該命令來手動觸發

  • 大部分情況,我們會通過配置 時間間隔 觸發 RDB 文件寫入。

1.2、AOF持久化

  • Redis 默認並沒有開啓 AOF 持久化方式,需要我們自行開啓,與 RDB 不同的是 AOF 是以記錄操作命令的形式來持久化數據的,我們可以查看以下 AOF 的持久化文件 appendonly.aof

  • appendfsync 的配置項有以下三種值可選:
    always:每一次系統 serverCorn 函數調用就刷新一次緩存區
    everysec:每秒執行一次磁盤寫入,期間所有的命令都會存儲在 aof 緩存區
    no:不做控制,任由操作系統決定什麼時候刷新緩衝區
    redis 默認配置是 everysec,即每秒刷新一次緩存區。

二、redis 配置文件

2.1、RDB 持久化配置

  • save格式:
    save <指定時間間隔> <執行指定次數更新操作>,滿足條件就將內存中的數據同步到硬盤中。
[root@localhost ~]# vim /etc/redis/6379.conf
save 900 1
save 300 10
save 60 10000

//生成快照失敗時,主線程是否停止寫入
stop-writes-on-bgsave-error yes
 
//是否採用壓縮算法存儲
rdbcompression yes
 
//數據恢復時是否檢測 RDB文件有效性
rdbchecksum yes

//RDB快照生成的文件名稱,一般採用默認的dump.rdb
dbfilename dump.rdb
 
//快照生成的路徑,AOF也是存放在這個路徑下面
dir /var/lib/redis/6379

2.2、AOF持久化配置

  • 開啓AOF 持久化就在 redis.conf 配置文件中將 appendonly no 調整爲 appendonly yes 。
[root@localhost ~]# vim /etc/redis/6379.conf
//開啓AOF持久化
appendonly yes   

//AOF文件名稱,默認值爲 appendonly.aof
appendfilename "appendonly.aof"

# appendfsync always
appendfsync everysec   默認推薦
# appendfsync no

//忽略最後一條可能存在問題的指令
aof-load-truncated yes

2.3、AOF 重寫

  • 理論上來說,隨着 redis 服務器運行時間的持續,生成的 aof 文件只會越來越大,redis 提供 AOF 重寫策略幫助優化和壓縮 aof 文件。能將幾百條甚至幾千條的命令日誌,重寫優化成個位數。帶給我們最直觀的好處就是,aof 文件體積變小,數據恢復速度變快。

  • 一般來說,我們可以通過向 redis 服務器發送 bgrewriteaof 命令觸發服務器對 aof 文件進行重寫,如果當前有正在運行的重寫子進程,則本次重寫 會推遲執行,否則,直接觸發一次重寫。

  • 除此之外,我們還可以在配置文件中配置 aof 文件達到多大,自動觸發文件重寫。

vim /etc/redis/6379.conf

//設置爲yes表示rewrite操作不進行同步fsync,暫時存在內存中,避免造成磁盤IO操作衝突,默認爲no,建議yes。
no-appendfsync-on-rewrite no
 
//當前aof文件大小超過上一次重寫的aof文件大小的百分之多少時進行重寫新的日誌進程
auto-aof-rewrite-percentage 100
 
//允許重寫aof文件的最小值,避免剛開始啓動Reids時由於文件尺寸較小導致頻繁的重寫操作
auto-aof-rewrite-min-size 64mb

三、RDB與AOF的持久化對比

3.1、RDB 優缺點

RDB 文件中保存的是 redis 內存中所有的數據一份快照。

  • 優點:
    1、相同的數據量下,rdb 文件要小於 aof 文件,且恢復速度要快於 aof
    2、rdb 文件中是整個數據的完整備份快照,數據存儲緊湊即便不同版本的 redis,也能順利恢復
    3、整個 rdb 持久化,只需要 fork 一個子進程進行持久化即可,父進程依然可以提供服務,效率最大化。
  • 缺點:
    1、容易丟失數據,即便配置了事件時間觸發備份,也至少丟失一秒數據
    2、如果數據量太大,fork 子進程的時候會阻塞毫秒級別時間

3.1、AOF 優缺點

AOF 是基於命令操作日誌,每條更新命令都會被刷到緩存區,然後在特定的時間節點被寫入 aof 磁盤文件。

  • 優點:
    1、相較於 RDB,AOF 數據可靠性更強,最多丟失一秒數據
    2、數據庫容錯率變好,一些誤操作可以通過直接改 aof 文件進行回退
  • 缺點:
    1、AOF 文件通常較大且恢復效率比不上 RDB,不適合做數據冷備份

總的來說,AOF 策略會使數據穩定性更高,具有更完整的數據備份,RDB 恢復效率高適合做災難恢復,建議生產環境上兩者都開啓。

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