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 協議》,轉載必須註明作者和本文連結