RDB 存在的问题
- 耗时
- 耗性能
什么是 AOF
- 客户端执行的每条命令都会写在 AOF 文件中;
- 当发生宕机时,通过载入 AOF 文件恢复数据;
AOF 三种策略
always
- 客户端执行的命令会存入缓冲区,always 策略会使命令一到缓冲区就写入磁盘;
- 优点:不丢数据;
- 缺点:IO 开销大;
everysec(默认)
- 每秒将缓冲区的命令写入磁盘;
- 优点:减少 IO;
- 缺点:丢 1s 数据;
no
- 操作系统决定什么时候把缓存中的数据刷入硬盘;
- 优点:不用自己管;
- 缺点:不可控;
AOF 重写
- 把过期的数据丢弃;
- 把重复的数据合并成最新值;
- 减少磁盘占用量;
- 加速恢复速度;
两种实现 AOF 重写的方式
bgrewriteaof
- 客户端发起,fork 出一个子进程,完成对 AOF 文件的整合;
AOF 重写配置
-
auto-aof-rewrite-min-size
AOF 文件重写需要到达的大小; -
auto-aof-rewrite-percentage
AOF 文件增长率,增长到这个比例就重写; -
aof_current_size
实时记录 AOF 当前尺寸(单位:字节); -
aof_base_size AOF
上次启动和重写的尺寸(单位:字节);
AOF 相关配置
appendonly yes
appendfilename "appendonly-${port}.aof"
appendfsync everysec
dir /bigdiskpath
-
no-appendfsync-on-rewrite yes
在 AOF 重写时,不做正常的 rewrite 操作; auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes