Redis 必知必會之持久化

蕭瀟發表於2020-02-08


1.Redis所有的資料儲存在記憶體中,對資料的更新將非同步的儲存到磁碟上。

2.持久化的方式:快照(MySQL Dump和Redis RDB)、寫日誌(MySQL Binlog和Redis AOF)

3.Redis RDB觸發方式

  • save(同步命令,替換老檔案)
  • bgsave (非同步命令,fork() 一個程式處理 一般情況會很快)
  • 自動
命令 save bgsave
IO型別 同步 非同步
是否阻塞 是(發生在fork())
複雜度 O(n) O(n)
優點 不會消耗額外記憶體 不阻塞客戶端命令
缺點 阻塞客戶端命令 需要fork 消耗記憶體

4.自動生成RDB的配置,本質是每seconds會有changes個改變 就會執行bgsave。

相關配置:

  • stop-writes-on-bgsave-error bgsave時發生錯誤時是否停止寫入
  • dir rdb目錄
  • rdbcompression 是否壓縮
  • rdbchecksum 交驗和檢驗

最佳實踐:

  • dbfilename dump-${port}.rdb
  • dir /bigdiskpath
  • stop-writes-on-bgsave-error yes
  • rdbcompression yes
  • rdbchecksum yes

5.rdb生成觸發機制 全量複製、debug reload 、shutdown。

6.RDB耗時、耗效能。

  • O(n)資料:耗時
  • fork():消耗記憶體,copy-on-write策略
  • Disk I/O : IO效能

7.RDB不可控、有可能丟失資料。

8.AOF 的三種策略

  • always 寫命令重新整理的緩衝區
  • everysec 預設
  • no 作業系統決定
命令 always everysec no
優點 不丟失資料 每秒一次fsync 不用管
缺點 IO開銷較大 一般sata盤只有幾百TPS 丟一秒資料 不可控

9.AOF重寫作用 減少硬碟佔用量、加速恢復速度。AOF重寫實現的兩種方式:bgrewriteaof、AOF重寫配置。

10.AOF重寫配置

  • auto-aof-rewrite-min-size:AOF檔案重寫需要的尺寸
  • auto-aof-rewrite-percentage:AOF檔案增長率
  • aof_current_size:AOF當前尺寸
  • aof_base_size:AOF上次啟動和重寫的尺寸

11.AOF配置最佳實踐

  • appendonly yes
  • appendfilename “appendonly-${port}.aof”
  • appendfsync everysec
  • dir /bigdiskpath
  • no-appendfsync-on-rewrite yes
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb

12.RDB和AOF對比

命令 RDB AOF
啟動優先順序
體積
恢復速度
資料安全性 丟資料 根據策略決定
輕重
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章