redis AOF
阿新 • • 發佈:2018-11-11
RDB問題:
- 耗時耗效能
- 容易丟失資料
耗時耗效能
- O(n)資料 耗時
- fork() :消耗記憶體,copy-on-write 策略
- Disk I/O :IO效能
不可控 丟失資料
時間 | save |
---|---|
T1 | 執行多個寫命令 |
T2 | 滿足RDB自動建立的條件 |
T3 | 再次執行多個寫命令 |
T4 | 宕機 |
AOF 執行原理 -建立
set hello world
AOF檔案
set hello world
hmset myhash a b
sadd myset a b
key | value |
---|---|
hello | string:world |
myhash | hash:{“a”:“b”} |
myset | set:[“a”:“b”] |
AOF 三種策略
- always
- eversec
- no
always
1:redis寫命令到重新整理的緩衝區
2:每條命令fsync到硬碟aof檔案
everysec 系統預設值
1:redis寫命令到重新整理的緩衝區
2:每秒把緩衝區fsync到硬碟 aof檔案
缺點宕機可能會丟失1秒的資料
no
1:根據作業系統
os決定fysnc
always everysec no 優缺點
命令 | always | everysync | no |
---|---|---|---|
優點 | 不丟失資料 | 每秒一次fysnc 丟1秒資料 | 不用管 |
缺點 | IO開銷比較大,一般的sata盤只有幾百tps | 丟1秒資料 | 不可控 |
AOF重寫
原生AOF | AOF重寫 |
---|---|
set hello world | set hello hehe |
set hello java | set counter 2 |
AOF重寫作用
減少硬碟用量
加速恢復速度
AOF重寫實現兩種方式
bgrewriteaof
aof重寫配置
bgrewriteaof命令
- client傳送命令bgrewriteaof 到redis
- redis master 接收
- redis開啟子程序
- aof重寫到aof檔案
AOF從重寫自動配置
配置名 | 含義 |
---|---|
auto-aof-rewrite-min-size | aof 檔案重寫需要的尺寸 |
auto-aof-rewrite-percentage | aof 檔案增長率 |
統計
統計名 | 含義 |
---|---|
aof_current_size | aof 當前尺寸 單位位元組 |
aof_base_size | aof 上次啟動和重寫的尺寸 |
AOF重寫配置
同時滿足
- aof_current_size >auto-aof-rewrite-min-size
- aof-current_size - aof_base_size/aof_base_size > auto-aof_rewrite-percentage
redis.conf
appendonly yes #開啟aof功能
appendfilename "appendonly-${port}.aof" //aof檔名稱
appendfsync everysec //同步策略
dir /bigdiskpath //儲存rdb aof log 目錄
no-appendfsync-on-rewrite yes //不進行aof 重寫
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes //防止出現斷電後aof不完整
AOF 演示
redis-cli
dbsize
vim redis.cong
appendonly yes
appendfilename "appendonly-6379.aof"
appendfsync
config get appendonly
"appendonly"
"no"
config get appendonly yes
ok
config rewrite
ok
exit
redis-cli
set