redis持久化

程序菜小子發表於2024-04-13

rdb全量二進位制備份

在指定時間間隔內將記憶體的資料集快照寫入磁碟,生成的預設檔案是dump,rdb

優點:
1、rdb最大限度提高reds效能,父程序不需要參與磁碟io

2、rdb檔案緊湊,全量備份,使用與備份和災難恢復

3、恢復大資料集時比aof快

缺點:rdb在資料集很大時,fork操作會非常耗時

備份指令和場景

save指令:會阻塞當前的redis伺服器,在命令執行期間,redis不處理其他命令。直至備份完成

bgsave指令:fork建立子程序,備份過程由子程序執行,並且在備份同時可以響應客戶端請求

自動化觸發:透過save 命令設定觸發條件,例子 save m n 表示在m秒內有n次資料修改,自動觸發bgsave

主從架構:從伺服器同步資料時,會傳送sync執行同步操作,主伺服器會執行bgsave操作

配置資訊

#持久化檔名稱
dbfilename dump.rdb
#持久化檔案儲存路徑
dir /usr/local/redis/data
#持久化策略, M秒內有個n個key改動,執行快照
save 3600 1
save 300 100
save 60 10000
#匯出rdb資料庫檔案壓縮字串和物件,預設是yes,會浪費CPU但是節省空間
rdbcompression yes
# 匯入時是否檢查
rdbchecksum yes

aof增量備份

追加的方式存入檔案中,重啟時會重新執行aof檔案以恢復資料,當機時,可以透過reedis-check-aof 方式檢查修復,不影響之前的資料

優點

1、資料更加安全

2、當aof檔案太大時,能後臺自動重寫aof

3、aof易於理解和解析

缺點

1、aof檔案比同級別的rdb檔案的等效大

2、恢復時,aof可能比rdb慢

核心原理

1、每次寫入命令會追加到aof_buf緩衝區

2、aof緩衝區根據對應的策略向硬碟做同步操作

3、高頻aof會影響效能,特別是每次刷盤操作時

同步方式

1、appendfsync always,每次有資料修改時就寫入到aof檔案中

2、appendfsync everysec 每秒執行一次

3、appendfsync 不主動同步,由作業系統自動排程刷磁碟,效能最好但不安全

重寫機制

手動觸發:bgrewriteaof

自動觸發:auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 50mb 設定觸發rewrite的最小尺寸

配置資訊

# 是否開啟aof
appendonly yes
# 檔名稱
appendfilename "appendonly.aof"
# 同步方式,每秒同步
appendfsync everysec
# aof重寫期間是否同步
no-appendfsync-on-rewrite no
# 重寫觸發配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 50mb
# 載入aof時如果有錯如何處理
# yes表示如果aof尾部檔案出問題,寫log記錄並繼續執行。no表示提示寫入等待修復後寫
入
aof-load-truncated yes

相關文章