前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis持久化之AOF

Redis持久化之AOF

作者头像
名字是乱打的
发布2022-05-13 11:15:18
2810
发布2022-05-13 11:15:18
举报
文章被收录于专栏:软件工程
AOF(Append-Only-File)持久化:保存写状态
  • 记录下除了查询以外的所有变更数据库状态的指令
  • 以append的形式追加保存到AOF文件中(增量)
解决AOF文件大小不断增大的问题,原理如下:

Redis 提供了bgrewriteaof 日志重写指令用于对 AOF 日志进行瘦身。其原理就是开辟一个子进程对内存进行遍历转换成一系列 Redis 的操作指令,序列化到一个新的 AOF 日志文件中。(注意这里也是读内存,没有管历史文件)

  • 调用fork(),创建一个子进程
  • 子进程把新的AOF写到一个临时文件里,不依赖原来的AOF文件
  • 主进程持续将新的变动同时写到内存和原来的AOF里
  • 主进程会获取子进程重写AOF的完成信号,往新AOF同步增量变动
  • 使用新的AOF文件替换掉旧的AOF文件
  • AOF恢复的过程像是把AOF日志文件里保存的命令重新执行一遍一样

重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式(相当于rdb)重写了一个新的AOF文件 重写过程分析,建议大家都看看,加强理解

触发AOF后台重写的条件

AOF重写可以由用户通过调用BgRewriteAOF手动触发。 服务器在AOF功能开启的情况下,会维持以下三个变量:

  • 记录当前AOF文件大小的变量 aof_current_size
  • 记录最后一次AOF重写之后,AOF文件的大小 aof_rewrite_base_size
  • 增长百分比变量 aof_rewrite_perc

每次当serverCron服务器周期性操作函数)函数执行时,它会检查以下条件是否全部满足,如果全部满足的话,就触发自动的AOF重写操作:

  • 没有BGSAVE命令(RDB持久化)/AOF持久化在执行;
  • 没有BGREWRITEAOF在进行;
  • 当前AOF文件大小要大于server.aof_rewrite_min_size(默认为1MB)或者在redis.conf配置了auto-aof-rewrite-min-size大小;
  • 当前AOF文件大小和最后一次重写后的大小之间的比率大于或者等于指定的增长百分比(在配置文件设置了auto-aof-rewrite-percentage参数,不设置默认为100%)

如果前面三个条件都满足,并且当前AOF文件大小比最后一次AOF重写时的大小要大于指定的百分比,那么触发自动AOF重写

当既有RDB文件又有AOF文件时候,Redis启动时候用哪个呢?
RDB和AOF的优缺点
  • RDB优点:全量数据快照,文件小,恢复快
  • RDB缺点:无法保存最近一次快照之后的数据
  • AOF优点:本质上是命令的执行日志可读性高,适合保存增量数据,数据不易丢失
  • AOF缺点:文件体积大,恢复时间长
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AOF(Append-Only-File)持久化:保存写状态
  • 解决AOF文件大小不断增大的问题,原理如下:
  • 触发AOF后台重写的条件
  • 当既有RDB文件又有AOF文件时候,Redis启动时候用哪个呢?
  • RDB和AOF的优缺点
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档