Redis 的混合持久化

RDB 相比于 AOF,数据恢复的速度更快,因为是二进制数据,直接加载进内存即可,但是 RDB 的频率不好把握。

  • 如果频率太低,在两次快照期间服务器发生宕机,可能会丢失较多的数据
  • 如果频率太高,频繁写入磁盘和创建子进程,会带来额外的性能开销

有没有什么方法,可以既有 RDB 快速恢复的优点,又有 AOF 丢失数据少的优点?

那就将 RDB 和 AOF 混合使用,这个方法是在 Redis 4.0 提出的,即混合使用 AOF 日志和内存快照,也叫混合持久化。

如果想要开启混合持久化功能,可以在 Redis 配置文件中将下面这个配置项设置成 yes。

c 复制代码
aof-use-rdb-preamble yes

混合持久化工作在 AOF 日志重写期间。

  1. 当开启了混合持久化,在 AOF 重写日志时,fork 出来的重写子进程会先将与主进程共享的内存数据,以 RDB 的方式写入到 AOF 文件
  2. 然后主进程处理的操作命令,会被记录在重写缓冲区里,重写缓冲区里的增量命令会以 AOF 的方式写入到 AOF 文件
  3. 写入完成后,子进程通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的 AOF 文件

简单来说,使用了混合持久化,AOF 文件的前半部分是 RDB 格式的全量数据,后半部分是 AOF 格式的增量数据。

这样做的好处在于,重启 Redis 加载数据时,由于前半部分是 RDB 格式,加载的时候速度会很快。

加载完 RDB 的内容后,才会加载后半部分的 AOF 的内容,这里的内容是 Redis 后台子进程重写 AOF 期间,主进程处理的操作命令,可以使得数据更少的丢失。

相关推荐
程序员老邢31 分钟前
《技术底稿 43》今日踩坑复盘:Redis 乱码 + MySQL 配置注入失败
redis·技术底稿·redisson 序列化·mysql 配置·项目踩坑·微服务问题排查
Mr. zhihao3 小时前
Redis五大高级数据结构:原理-场景-底层-横向对比
数据结构·redis
YL200404267 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
better_liang8 小时前
每日Java面试场景题知识点之-如何设计分布式锁
java·redis·zookeeper·面试·分布式锁
自传.10 小时前
Redis 高频考试面试知识点1
redis·aof·rdb·redis面试
小新同学^O^10 小时前
Redis的简单总结
数据库·redis·学习
憧憬成为java架构高手的小白12 小时前
黑马八股redis
数据库·redis·缓存
cfm_291412 小时前
Redis高并发分布式锁了解
redis·分布式
西安邮电大学12 小时前
Redis核心数据结构以及应用场景
java·redis·后端·其他·面试
L16247613 小时前
原流程翻车?Redis 生产环境全场景安全升级操作手册(源码编译 + 包管理 + 热升级 + 回滚)
redis·安全·bootstrap