課程筆記 課程是慕課網(wǎng)的https://coding.imooc.com/class/151.html
一、AOF同步三種策略
- always:每執(zhí)行一條命令,就會(huì)執(zhí)行一次
fsync命令將緩沖區(qū)的數(shù)據(jù)寫(xiě)入硬盤(pán),IO開(kāi)銷(xiāo)較大 - everysec:每一秒執(zhí)行一次
fsync命令將緩沖區(qū)的數(shù)據(jù)寫(xiě)入硬盤(pán),所以可能會(huì)丟失一秒的數(shù)據(jù)(默認(rèn)配置) - no:根據(jù)操作系統(tǒng)堅(jiān)定使用那種策略,所以不可控
二、AOF重寫(xiě)
| 原生AOF命令 | AOF重寫(xiě) |
|---|---|
| set hello world set hello java set hello haha |
set hello haha |
| incr couter incr couter |
set couter 2 |
| rpush mylist a rpush mylist b rpush mylist c |
rpush mylist a b c |
作用:把過(guò)期的、沒(méi)用的、重復(fù)的以及可優(yōu)化的命令,進(jìn)行化簡(jiǎn)。
- 減少硬盤(pán)占用量
- 加速恢復(fù)速度
實(shí)現(xiàn)方式:
-
bgrewriteaof命令
命令執(zhí)行過(guò)程
注:AOF重寫(xiě)是將redis在內(nèi)存中的數(shù)據(jù)進(jìn)行回朔生成新的AOF文件,而不是重寫(xiě)AOF文件生成新的AOF文件去替換。 - AOF重寫(xiě)配置
-
auto-aof-rewrite-percentage 100AOF文件增長(zhǎng)率 -
auto-aof-rewrite-min-size 64mbAOF重寫(xiě)需要的尺寸
-
自動(dòng)觸發(fā)重寫(xiě)需要:
- aof_current_size > auto-aof-rewrite-min-size
- (aof_current_size - aof_base_size> auto-aof-rewrite-percentage)或(aof_base_size > auto-aof-rewrite-percentage)
注:
1. aof_current_sizeAOF當(dāng)前尺寸(單位:字節(jié))
2. aof_base_sizeAOF上次啟動(dòng)和重寫(xiě)的尺寸(單位:字節(jié))
3. aof_current_size和aof_base_size在redis客戶端使用info命令查看,如果看不到可以檢查一下redis.conf的appendonly是不是yes
三、AOF配置
appendonly yes #打開(kāi)AOF 默認(rèn)是no
appendfilename "appendonly-${port}.aof" #指定AOF文件的名稱 可用端口作為區(qū)分
appendfsync everysec #指定AOF同步的策略
dir ./ #指定AOF文件的目錄 其實(shí)指定了許多文件的目錄
aof-load-truncated yes # 重啟或加載的時(shí)候 發(fā)現(xiàn)AOF文件錯(cuò)誤時(shí),是否忽略
no-appendfsync-on-rewrite yes 在執(zhí)行AOF重寫(xiě)的時(shí)候是否關(guān)閉同步執(zhí)行AOF操作:是的
作用:執(zhí)行AOF重寫(xiě)的時(shí)候,會(huì)操作磁盤(pán)寫(xiě)數(shù)據(jù),而AOF也是操作磁盤(pán)寫(xiě)數(shù)據(jù)。重寫(xiě)的時(shí)候會(huì)涉及大量磁盤(pán)操作,造成主線程阻塞。所以需要no-appendfsync-on-rewrite。
說(shuō)明:
- 配置為
no: 無(wú)法忍受數(shù)據(jù)丟失。相當(dāng)于appendonly no在重寫(xiě)的時(shí)候,不執(zhí)行AOF操作,如果此時(shí)redis掛掉,就會(huì)丟失數(shù)據(jù)。 - 配置為
yes: 無(wú)法忍受性能差,可以允許少量數(shù)據(jù)丟失。
