1. 程式人生 > 資料庫 >Redis持久化RDB和AOF區別詳解

Redis持久化RDB和AOF區別詳解

RDB是Redis記憶體到硬碟的快照,用於redis持久化,建立RDB二進位制檔案,將儲存在記憶體中的資料,持久化的放到硬碟中,當我們需要這些資料的時候,啟動載入RDB檔案,資料將會被存入記憶體中,其實RDB就是一種快照的方式持久化儲存資料,也可以作為一種複製媒介,這個我們後面在談。

RDB

觸發機制--主要三種方式

  • save 同步命令(會阻塞redis)
  • bgsave 非同步命令(fork)
  • 自動

Save同步命令

save

檔案策略:生成一個臨時檔案,如果存在老的檔案,將會替換舊檔案

Redis持久化RDB和AOF區別詳解

bgsave 非同步命令

主程序通過fork()函式,建立子程序生成DRB檔案,在此期間訪問redis仍然能正常響應

Redis持久化RDB和AOF區別詳解

命令 save bgsave
IO 同步 非同步
阻塞 阻塞 阻塞(操作不當fork阻塞)
優點 不額外佔用記憶體 不阻塞客戶端命令
缺點 阻塞客戶端命令 需要fork,額外消耗記憶體

redis自動生成RDB檔案(不可控)

save 900 1 #900秒 改了一次就自動生成RDB檔案
save 300 10 #300秒修改了10次就自動生成RDB檔案

redis save配置推薦

#關閉自動儲存配置#save 900 1   #900秒 改了一次就自動生成RDB檔案#save 300 10   #300秒修改了10次就自動生成RDB檔案
dbfilename dump-${port}.rdb   #rdb檔名
dir /bigdiskpath      #分盤,rdb檔案儲存位置
stop-writes-on-bgsave-error yes  #bdsave出錯,停止寫入
rdbcompression yes           #採用壓縮位置
rdbchecksum yes            #開啟校驗和

不容忽視的觸發機制

有時候我們沒有執行save bgsave命令,也沒有開啟自動儲存命令,還是會生成RDB,可能是因為以下原因:

  • 全量複製
  • debug reload
  • shutdown

AOF

RDB存在的問題:耗時耗效能,阻塞丟失資料

AOF執行原理:每執行一條命令,就在AOF中增加一條記錄。當需要恢復時,直接執行AOF寫入redis

AOF三種策略

  • always(每條命令都把緩衝區fsync到硬碟)
  • everysec(每秒重新整理一次,每秒吧緩衝區fsync到硬碟)
  • no(跟隨作業系統,有作業系統決定,不可控)

命令 always everysec no
優點 不丟失資料 每秒一次 不用管
缺點 IO開銷大 丟失一秒資料 不可控

AOF重寫

將過期的,重複的,做一些優化合並

作用:減少磁碟空間佔用,加快檔案恢復速度

Redis持久化RDB和AOF區別詳解

AOF重寫兩種方式:

bgrewriteaof

aof重寫配置

Redis持久化RDB和AOF區別詳解

AOF重寫配置

auto-aof-rewrite-min-size #AOF重寫需要的最小尺寸
auto-aof-rewrite-percentage #AOF檔案增長率
aof_current_size #統計當前aof檔案大小
aof_base_size #aof上次啟動和重寫的尺寸

Redis持久化RDB和AOF區別詳解

AOF配置

Redis持久化RDB和AOF區別詳解

RDB和AOF的比較

Redis持久化RDB和AOF區別詳解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。