【面试八股总结】Redis持久化

news2024/11/17 6:26:46

        Redis 实现了数据持久化的机制,这个机制会把数据存储到磁盘,这样在 Redis 重启就能够从磁盘中恢复原有的数据。 Redis 共有三种数据持久化的⽅式:

  • AOF 日志:每执行一条写操作命令,就把该命令以追加的方式写入到⼀个文件里;
  • RDB 快照:将某一时刻的内存数据,以二进制的方式写入磁盘;
  • 混合持久化方式:Redis 4.0 新增的方式,集成了 AOF 和 RBD 的优点。

一、AOF日志

        AOF以日志的形式记录服务器所处理的每一个写操作,Redis服务器启动之初,会读取该日志来重新构建数据库,以保证启动后的数据库是完整的。

注意:AOF只会记录写操作命令,读操作命令是不会被记录的。

        AOF日志是写后日志,"写后" 的意思是 Redis 是先执行命令,把数据写入内存,然后才记录日志。Redis是内存和日志(写后日志),MySQL是磁盘数据和日志(写前日志)。

写后日志过程

Redis 使用写后日志这一方式的好处:

  1. 可以避免出现记录错误命令的情况。
  2. 它是在命令执行后才记录日志,所以不会阻塞当前的写操作。

1. 写入 AOF 日志过程

Redis 写入 AOF 日志过程:

  1. Redis 执行完写操作命令后,会将命令追加到 server.aof_buf缓冲区;
  2. 通过write()系统调用,将aof_buf缓冲区的数据写入到AOF文件,此时数据并没有写入硬盘,而是拷贝到内核缓冲区page cache,等待内核将数据写入硬盘;
  3. 由内核决定缓冲区数据什么时候写入硬盘。
Redis 写入 AOF 日志过程

2. AOF写回策略

Redis 提供了 3 种写回硬盘的策略:Always、No、Everysec

  • Always是每次写操作命令执行完后,同步将 AOF 日志数据写回硬盘;
  • Everysec每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,然后每隔⼀秒将缓冲区里的内容写回到硬盘;
  • No就是不控制写回硬盘的时机。每次写操作命令执行完后,先将命令写入到 AOF ⽂件的内核缓冲区,再由操作系统决定何时将缓冲区内容写回硬盘;

写回策略选择:

  • 想要获得高性能,就选择 No 策略
  • 如果想要得到高可靠性保证,就选择 Always 策略
  • 如果允许数据有一点丢失,又希望性能别受太大影响的话,那么就选择 Everysec 策略

3. AOF磁盘重写机制

        AOF 日志是一个文件,随着执行的写操作命令越来越多,文件的大小会越来越大。为避免日志文件过大,Redis 提供AOF重写机制,它会直接扫描数据中所有的键值对数据,然后为每⼀个键值对生成⼀条写操作命令,接着将该命令写入到新的 AOF 文件,重写完成后,就替换掉现有的 AOF日志

        重写的过程是由后台子 bgrewriteaof 进程完成的,这样可以使得主进程可以继续正常处理命令。在重写 AOF 期间,当 Redis 执行完一个写命令之后,它会同时将这个写命令写入到 「AOF 缓冲区」和 「AOF 重写缓冲区」。

        在 bgrewriteaof 子进程执行 AOF 重写期间,主进程需要执行以下三个工作:

  • 执行客户端发来的命令;
  • 将执行后的写命令追加到 「AOF 缓冲区」;
  • 将执行后的写命令追加到 「AOF 重写缓冲区」;

        当子进程完成 AOF 重写工作,向主进程发送信号,主进程收到信号后,调用信号处理函数,将AOF重写缓冲区中所有内容追加到新的AOF文件中,并将新的AOF文件改名,覆盖原有AOF文件。

二、RDB快照

        RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据。每次执行快照,都是把内存中的「所有数据」都记录到磁盘中。如果频率太频繁,可能会对 Redis 性能产生影响。如果频率太低,服务器故障时,丢失的数据会更多。通常可能设置至少5 分钟才保存⼀次快照。

        Redis 提供了两个命令来生成 RDB 文件,save 和 bgsave,区别在于是否在主线程中执行:

  • save 命令在主线程生成 RDB 文件,由于和执行操作命令在同⼀个线程,所以如果写⼊入RDB 文件的时间太长,会阻塞主线程;
  • bgsave 命令,会创建⼀个子进程来生成 RDB 文件,这样可以避免主线程的阻塞。

Redis 的快照是全量快照,也就是说每次执行快照,都是把内存中的「所有数据」都记录到磁盘中。

三、混合持久化

          开启混合持久化功能,可以在 Redis 配置文件将下面这个配置项设置成 yes:

aof-use-rdb-preamble yes

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

        这样的好处在于,重启 Redis 加载数据的时候,由于前半部分是 RDB 内容,这样加载的时候速度会很快。加载完 RDB 的内容后,才会加载后半部分的 AOF 内容,这⾥的内容是 Redis 后台⼦进程重写 AOF 期间,主线程处理的操作命令,可以使得数据更少的丢失。

        混合持久化的缺点是AOF文件的可读性变差了,以及兼容性比较差(Redis4.0之前版本不支持)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.5图像缩放

实验原理 在OpenCV(Open Source Computer Vision Library)中,resize函数用于调整图像的尺寸。这个函数非常有用,尤其是在进行图像预处理时,比如在图像识别或机器学习任务中需要统一输入图像的大小。 下面是基于C的re…

Qt与Udp

(1)绑定端口 (2)广播 用udp实现广播通信_udp广播-CSDN博客 数据的发送是面向整个子网的,任何一台在子网中的计算机都可以接收到相同的数据。 如果一台机器希望向其他N台机器发送信息,这时候可以使用UDP的广播。 --------------- 广播地址&#xff1…

大数据-133 - ClickHouse 基础概述 全面了解

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

如何编译OpenHarmony SDK API

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 startup子系统之syspara_lite系统属性部件 (1) startup子系统之syspara_lite系统属性部件 (2) startup子系…

【数据集】城市不透水面数据集CLUD-Urban

城市不透水面数据集CLUD-Urban 数据概述数据下载参考 数据概述 1、论文-ESSD-A 30 m resolution dataset of China’s urban impervious surface area and green space, 2000–2018 空间分辨率:30 m 数据下载 数据下载:A 30-meter resolution data…

Grafana面板-linux主机详情(使用标签过滤主机监控)

1. 采集器添加labels标签区分业务项目 targets添加labels (模板中使用的project标签) … targets: [‘xxxx:9100’] labels: project: app2targets: [‘xxxx:9100’] labels: project: app1 … 2. grafana面板套用 21902 模板 演示

航空航司reese84逆向

reese84逆向 Reese84 是一种用于保护网站防止自动化爬虫抓取的防护机制,尤其是在航空公司网站等需要严格保护数据的平台上广泛使用。这种机制通过复杂的指纹识别和行为分析技术来检测和阻止非人类的互动。例如,Reese84 可以通过分析访问者的浏览器指纹、…

软件开发人员的真实面

我相信我们都看过视频上那些名为“软件工程师的一天”的视频。这些视频通常只展示一些日常任务,比如吃饭、打字和参加会议。我对这些视频未能展示软件开发工作的真实内容感到失望。这些内容往往只关注表面活动,却忽略了工作中的思维挑战和解决问题的部分…

新升级|优化航拍/倾斜模型好消息,支持处理多套贴图模型!

【天元轻量化软件】一直在不断地追求进步和完善,以满足更多用户的各种需求。 电脑登录天元官网免费体验:天元轻量化软件官网 本次我们对“智能PBR”功能进行了更新。更新后的“智能PBR”支持带多套贴图的模型进行使用。 本轮更新后,主要受益…

CISP-PTE CMS sqlgun靶场

sql靶场有个搜索框先点一下go,有回显说明存在漏洞 有个xss 然后在这里尝试sql注入 输入 -1 union select 1,2,3# 有回显可以查看数据库 然后查询数据库,用户 查询数据库的表名 查询它的数据这里admin用户的密码是md5加密 去解密看看 然后扫描ip目录发…

linux-L5.linux查看应用占用的资源top

启动 top 命令: 打开终端,输入 top 并按回车键。 查看进程信息: 默认情况下,top 会显示系统的整体资源使用情况,包括 CPU、内存、磁盘 I/O 和网络 I/O 等信息。然后它会列出当前运行的进程,以及它们分别占…

Leetcode面试经典150题-138.随机链表的复制

题目比较简单,重点是理解思想,random不管,copy一定要放在next 而且里面的遍历过程不能省略 解法都在代码里,不懂就留言或者私信 /* // Definition for a Node. class Node {int val;Node next;Node random;public Node(int val…

【脑机接口】脑机接口性能的电压波形的尖峰分类和阈值比较

Comparison of spike sorting and thresholding of voltage waveforms for intracortical brain–machine interface performance 脑机接口性能的电压波形的尖峰分类和阈值比较论文下载:摘要1 介绍2 方法2.1数据获取2.2spike sorting 技术2.3神经数据分析 3结果3.1神…

【机器学习】线性动态系统的基本概念以及卡尔曼滤波器的概念和应用方式

引言 线性动态系统(Linear Dynamical System,LDS)是一类特殊的动态系统,其中系统的状态转移和观测过程都是线性的 文章目录 引言一、线性动态系统1.1 LDS的基本组成1.2 LDS的数学表示1.2.1 状态方程1.2.2 观测方程LDS的应用 1.3 L…

计算机网络27、28——Linux命令1、2

1、虚拟机网络前方路径内容 用户名机器名:/$ $表示普通用户,#表示root用户 2、Linux不分盘,都是绝对路径 /表示根目录,表示计算机文件夹下 ~是当前用户的家,表示home文件夹下自己的文件夹 3、bin文件夹下的是可执…

【C++】—— list 的了解与使用

【C】—— list 的了解与使用 1 list 的函数接口2 迭代器2.1 简单使用 list 的迭代器2.2 迭代器的划分2.3 不同迭代器的使用场景2.3.1 sort2.3.2 reverse2.3.3 find 3 emplace_back4 操作函数4.1 sort4.1.1 list中sort介绍4.1.2 list 中 sort 与算法库中 sort 效率比较 4.2 mer…

软件测试面试少走弯路

自我介绍开场白 只会手工和会写基础脚本分别如何介绍 自动化性能都会该如何介绍?记得面试前准备好如何回答怎么做到的? 项目如何进行介绍 回答验证码机制的处理问题 不会自动化和性能能找到工作吗? 萌芽计划对软件测试的大致了解 自动化测试…

操作系统 ---- 调度算法【先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRRN)】

目录 一、常见的调度算法 1. 先来先服务(FCFS, First-Come, First-Served) 2. 最短作业优先(SJF, Shortest Job First) 3. 优先级调度(Priority Scheduling algorithm,PSA) 4. 轮转调度&am…

嵌入式-QT学习-小练习

1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示&#xff1a; Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …

阿里云 EMR StarRocks 在七猫的应用和实践

七猫公司简介 七猫是一家深耕文化娱乐行业的互联网企业&#xff0c;总部坐落在上海市前滩中心。七猫旗下原创文学网站七猫中文网于2017年5月正式上线&#xff0c;专注为原创作者提供创作指导、版权运营等全方位一体化服务。七猫拳头产品七猫免费小说App于2018年8月正式上线&am…