课程笔记 课程是慕课网的https://coding.imooc.com/class/151.html
一、AOF同步三种策略
- always:每执行一条命令,就会执行一次
fsync
命令将缓冲区的数据写入硬盘,IO开销较大 - everysec:每一秒执行一次
fsync
命令将缓冲区的数据写入硬盘,所以可能会丢失一秒的数据(默认配置) - no:根据操作系统坚定使用那种策略,所以不可控
二、AOF重写
原生AOF命令 | AOF重写 |
---|---|
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 |
作用:把过期的、没用的、重复的以及可优化的命令,进行化简。
- 减少硬盘占用量
- 加速恢复速度
实现方式:
-
bgrewriteaof
命令
命令执行过程
注:AOF重写是将redis在内存中的数据进行回朔生成新的AOF文件,而不是重写AOF文件生成新的AOF文件去替换。 - AOF重写配置
-
auto-aof-rewrite-percentage 100
AOF文件增长率 -
auto-aof-rewrite-min-size 64mb
AOF重写需要的尺寸
-
自动触发重写需要:
- 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_size
AOF当前尺寸(单位:字节)
2. aof_base_size
AOF上次启动和重写的尺寸(单位:字节)
3. aof_current_size
和aof_base_size
在redis客户端使用info
命令查看,如果看不到可以检查一下redis.conf
的appendonly
是不是yes
三、AOF配置
appendonly yes #打开AOF 默认是no
appendfilename "appendonly-${port}.aof" #指定AOF文件的名称 可用端口作为区分
appendfsync everysec #指定AOF同步的策略
dir ./ #指定AOF文件的目录 其实指定了许多文件的目录
aof-load-truncated yes # 重启或加载的时候 发现AOF文件错误时,是否忽略
no-appendfsync-on-rewrite yes
在执行AOF重写的时候是否关闭同步执行AOF操作:是的
作用:执行AOF重写的时候,会操作磁盘写数据,而AOF也是操作磁盘写数据。重写的时候会涉及大量磁盘操作,造成主线程阻塞。所以需要no-appendfsync-on-rewrite
。
说明:
- 配置为
no
: 无法忍受数据丢失。相当于appendonly no
在重写的时候,不执行AOF操作,如果此时redis挂掉,就会丢失数据。 - 配置为
yes
: 无法忍受性能差,可以允许少量数据丢失。
网友评论