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 期间,主进程处理的操作命令,可以使得数据更少的丢失。

相关推荐
CS_GUIDER3 小时前
踩坑记录:Redis 连接报错 “Failed to get reply: connection reset“ 之端口冲突问题
redis
aristo_boyunv4 小时前
Redis发布订阅【充当消息中间件】
数据库·redis·缓存
艾德金的溪12 小时前
redis-7.4.6部署安装
前端·数据库·redis·缓存
东城绝神13 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 7.4.5容器版分片集群》
linux·运维·redis·架构·分片集群
我的offer在哪里13 小时前
Redis
数据库·redis·缓存
阿维的博客日记17 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
好玩的Matlab(NCEPU)17 小时前
Redis vs RabbitMQ 对比总结
数据库·redis·rabbitmq
en-route17 小时前
基于 Redis 的基数统计:高效的大规模去重与计数
redis·基数统计
深圳蔓延科技17 小时前
Redis,什么是缓存穿透/击穿/雪崩,如何解决它们
redis
蹦跑的蜗牛18 小时前
Spring Boot使用Redis实现消息队列
spring boot·redis·后端