1. 前言

Redis 的设计核心是提供快速的查询和存储能力,所以所有的数据都被存储在内存中。相对于硬盘,内存中的数据是半持久化存储,当遇到不可抗阻力,例如断电或者硬件损坏导致的服务器宕机时,内存中的数据会完全丢失。为了防止 Redis 中的数据丢失,需要将数据持久化存储到硬盘。

2. 持久化方案

面试官提问: Redis 的持久化方案有哪些?这些方案之间有什么区别?

题目解析:

首先给出持久化的定义:持久化是把 Redis 数据从内存同步到硬盘的过程。

其次给出 Redis 中两种持久化方案:

  • RDB 持久化 :将 Redis 的数据 定时 dump 到硬盘;
  • AOF 持久化 :将 Redis 的操作日志追加写入硬盘文件。

在 Redis 的 redis.conf 文件中,预先提供了 RDB 和 AOF 的配置方案。

2.1 RDB 方式

图片描述

(RDB 持久化方案)

RDB 持久化方式的步骤是:

(1)定时从 Redis 主进程 fork 一个 Redis 子进程;
(2)Redis 子进程生成内存的数据快照,并且写入 RDB 临时文件;
(3)临时文件写入成功后,生成 RDB 最终文件。

RDB 同步有三种触发机制:save 指令、bgsave 指令、自动化指令

  • save 指令 :命令会阻塞当前 Redis 服务器,导致 Redis 暂时不可用;
  • bgsave 指令 :命令在后台异步执行操作,Redis 服务器同时也能响应客户端请求,阻塞只发生在 fork 时间段,时间很短。
  • 自动化指令 :在 redis.conf 文件配置,例如数据在经过 m 次修改后自动触发 bgsave 命令。

简单来说,因为 save 指令会在整个过程中阻塞服务器,所以线上生产环境都是使用 bgsave 指令。

2.2 AOF 方式

图片描述

(AOF 持久化方案)

AOF 持久化方式以日志形式记录 Redis 服务器的每一个插入、修改、删除操作,以文本的形式异步保存。

2.3 对比

在介绍完了两种同步方式后,需要和面试官解释两种方式的特点。

RDB 方式的优点:
(1)性能较高:在开始持久化时,只需要 fork 出一个子进程,子进程负责持久化的工作,避免主线程的 IO 操作。
(2)启动效率高:相对于 AOF 方式,如果数据集非常大, 启动速度更快。

RDB 方式的缺点:
(1)如果服务器在定时持久化之前宕机,那么 Redis 中没来得及写入的数据都会丢失。

AOF 的优点:
(1)数据安全:每次修改都会同时追加到日志文件,就算服务器宕机,数据也能在日志文件中找回。
(2)方便重建:日志文件同 MySQL 的 binlog 功能相同,我们所有的写操作都能从日志文件中获取。

AOF 的缺点:
(1)运行效率低:AOF 方式本质上是牺牲缓存的性能,来换去缓存的一致性。
(2)占用文件更大:AOF 的日志文件相对 RDB 同步的文件,通常要更大,所以在恢复时速度更慢。

3. 小结

本章节介绍了 Redis 的持久化方式,RDB 和 AOF 方式各有特点,需要衡量生产环境的不同需求定制化选择。如果偏向高性能,则选择 RDB 方式,如果需要数据高一致性,那么选择 AOF 方式。

本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈