redis AOF

作者: steamed_bun | 来源:发表于2020-02-11 14:51 被阅读0次

课程笔记 课程是慕课网的https://coding.imooc.com/class/151.html

一、AOF同步三种策略

  1. always:每执行一条命令,就会执行一次fsync命令将缓冲区的数据写入硬盘,IO开销较大
  2. everysec:每一秒执行一次fsync命令将缓冲区的数据写入硬盘,所以可能会丢失一秒的数据(默认配置)
  3. 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

作用:把过期的、没用的、重复的以及可优化的命令,进行化简。

  • 减少硬盘占用量
  • 加速恢复速度

实现方式:

  1. bgrewriteaof命令
    命令执行过程
    注:AOF重写是将redis在内存中的数据进行回朔生成新的AOF文件,而不是重写AOF文件生成新的AOF文件去替换。
  2. AOF重写配置
    1. auto-aof-rewrite-percentage 100 AOF文件增长率
    2. 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_sizeAOF当前尺寸(单位:字节)
2. aof_base_sizeAOF上次启动和重写的尺寸(单位:字节)
3. aof_current_sizeaof_base_size在redis客户端使用info命令查看,如果看不到可以检查一下redis.confappendonly是不是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: 无法忍受性能差,可以允许少量数据丢失。

相关文章

网友评论

      本文标题:redis AOF

      本文链接:https://www.haomeiwen.com/subject/kteaactx.html