AOF

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis AOF是一种持久化机制,用于将Redis服务器的操作日志以追加的方式记录在磁盘上。引用中提到,当AOF文件的体积变得过大时,Redis可以自动进行AOF重写。AOF重写实际上是对当前数据集所需的最小命令集合进行重写,而不是对原有的AOF文件进行写入和读取操作。这个重写过程是在后台进行的,通过fork子进程来执行。重写后的新AOF文件能够恢复当前数据集的状态。 引用中提到,Redis将AOF重写程序放在后台子进程中执行的原因是为了避免影响服务器的请求处理能力。通过将AOF重写程序放在后台执行,可以确保服务器能够继续处理请求,而不会被AOF重写过程阻塞。 在Redis服务器中,redisServer结构维护着服务器的状态,而aof_buf域则用来保存等待写入AOF文件的协议文本(RESP)。这些协议文本包含了对键的操作命令,用于记录服务器的操作日志。当需要将操作日志写入AOF文件时,这些协议文本会被写入到AOF缓冲区中,然后由后台的AOF子进程负责将缓冲区中的内容写入到AOF文件中。这种方式可以提高性能,并且减少了直接写入文件的开销。引用中提到了这一点。 综上所述,Redis的AOF机制是通过记录操作日志来实现数据持久化的。当AOF文件体积过大时,Redis会自动进行AOF重写,将当前数据集所需的最小命令集合写入一个新的AOF文件中。为了避免影响服务器的请求处理能力,AOF重写过程会在后台执行。通过维护一个AOF缓冲区,Redis可以将待写入的协议文本暂时保存在内存中,然后由后台子进程负责将其写入AOF文件中。这种机制可以提高性能并减少直接写入文件的开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值