写点什么

面试官:Redis 有什么持久化策略?

  • 2023-04-21
    湖南
  • 本文字数:827 字

    阅读完需:约 3 分钟

面试官:了解过 Redis 的持久化策略吗?介绍一下?


Redis 的持久化策略分为三种,分别是 AOF 持久化、RDB 快照持久化、以及这两种的一个混合模式。

下面我详细介绍一下这三种策略的异同吧:

首先是 AOF 持久化

这个持久化方式在 Redis 中是默认不开启的,所以需要使用的时候要在配置文件中配置一下

AOF 持久化其实就是 Redis 主进程根据写操作生成日志并写到 aof 文件的过程。


这里的 aof 文件可以理解为 Redis 的一个日志文件,只要是写操作都会生成对应的日志并需要写入 aof 文件中;


在 Redis 中是先执行操作(写操作),后生成日志的;


在日志真正写进 aof 文件之前,会经过 aof 缓冲区,是用来提高写入性能的;


aof 缓冲区的落盘策略有三种 Always、Everysec、No。


这三种策略的数据安全性和性能都有所不同,我们可以根据实际的业务需求来选择;


aof 是追加写的,为了避免 aof 文件过于巨大,Redis 中提供了 aof 重写机制,为了避免阻塞主进程处理客户请求,所以 aof 的重写是交由 fork 出来的子进程处理的。

接着介绍一下 RDB 快照持久化

这种方式是 Redis 中默认使用,在性能上会比 AOF 要好一些,因为 AOF 在恢复数据的时候是需要重新执行命令的,而 RDB 只需要将快照数据重新加载进内存即可。


RDB 快照可以由主进程或者子进程生成,取决于执行什么样的命令(save 是主进程,bgsave 是 fork 出来的子进程执行)。

最后讲讲混合持久化

混合持久化是工作在 AOF 重写的过程中的,先是将 RDB 快照数据写进新的 aof 文件,接着将这过程中新增的日志以 aof 的形式追加在新的 aof 文件后面,最后将新的 aof 文件取代旧的。


混合持久化就充分利用了 RDB 的快速和 AOF 的安全性,前面的 RDB 数据只需要加载进内存即可,而增量的 aof 日志是很少量的。


其实 Redis 的这整个设计看起来可以说是一个标准的复制状态机的应用,日志 + 快照,我们可以看到 MySQL 也有类似的设计,redo log 是它的日志,而 bing log 是它的快照。


作者:小赖同学

链接:https://juejin.cn/post/7224149297951277113

来源:倔金

用户头像

还未添加个人签名 2021-07-28 加入

公众号:该用户快成仙了

评论

发布
暂无评论
面试官:Redis有什么持久化策略?_Java_做梦都在改BUG_InfoQ写作社区