Redis面试专题-持久化

news2024/12/27 5:19:15

前言

开始Redis面试知识的复习和资料的收集(收集和参考了网上的优质文章),本篇文章会不断更新,本系列文章主要分为两部分,一部分是该专题所涉及的相关基础知识,另一部分是面试题与思考题,大部分重要知识和基础知识的延伸会在面试题和思考题中给出,这样做的目的是给出具体的场景,便于理解知识(相较于直接在知识中展出),且我会以相对口语化的方式叙述。

建议关注,随着我复习的进度,内容会一直得到补充

持久化相关知识

1.三种持久化机制

RDB持久化,AOF持久化,混合型持久化(将RDB和AOF结合在一起,这里就不过多赘述了)

2.RDB持久化

RDB全称叫做Redis数据备份文件,也叫做Redis数据快照,将内存中所有数据都记录到磁盘中,当Redis故障或重启时,从磁盘中读取快照文件,恢复数据

主动进行RDB持久化:

事实上,redis有自己的自动触发持久化机制,并且配置在了配置文件中:

由上面可见,两次备份间如果发生宕机,会出现数据丢失,因为其备份的频率很低

配置文件中关于RDB的其他配置

3.深入剖析一下RDB持久化过程

bgsave异或持久化可以做到几乎对主进程0阻塞,为什么说是几乎呢,因为主进程去fork这个子进程的时候是阻塞的,为了让主进程尽快得去处理其他请求,bgsave是如何实现:

在linux中,所有进程都无法直接操作物理内存,操作系统会为进程分配虚拟内存,然后再虚拟内存中会有一个与物理内存做映射的表叫做页面,通过这个对物理内存进行读写,当fork子线程的时候,不是把内存做拷贝,而是把页表进行拷贝,此时子进程就可以对内存中的数据进行修改,这样,无需拷贝内存中的数据就可以实现内存共享,使得fork子线程的速度非常快

子线程就会读取内存中的数据并且写入磁盘中的一个RDB文件中来持久化,并替换旧的RDB文件 

但由于是异步的,此时子进程正在读取数据,主进程可能收到修改数据的指令,此时读写会发生冲突,为了解决这个问题,copy采用了copy-on-write技术,共享内存只能读,当主线程要修改共享内存中的某个数据,例如数据A时,会将该数据A复制出来,并进行修改,此后对于数据A的读和写都在副本中进行

极端情况下,当子线程读取数据存储到RDB文件内的速度很慢,此时主线程收到了将所有数据进行修改的请求,那么所有数据都要复制一份,变成双倍内存

4.AOF持久化

AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看作是命令日志文件。

AOF默认是关闭的,打开:

AOF记录的频率:

由于是记录命令,AOF比RDB文件大得多,并且记录的大部分名称都是无效的,只有对一个key的最后一次写操作才有意义,可以通过bgrewriteaof命令,让AOF文件执行重写功能

自动触发文件重写阈值:

5.RDB和AOF对比


面试题

1.redis持久化机制有哪些?

RDB,AOF,混合型持久化

2.那仔细讲讲你对他们的理解

RDB:RDB是通过将内存中当前进程的数据生成快照(.rdb)文件保存到硬盘中,可以自动触发或者手动触发

自动触发的配置写在了配置文件中:

900秒内如果至少1个key被修改,就执行bgsave,300秒内如果至少10个key被修改,就执行bgsave,10000秒内如果至少60个key被修改,就执行bgsave

手动触发:save和bgsave,其中save是主线程来进行生成RDB文件进行持久化过程,会造成长时间阻塞,一般使用bgsave,主线程会fork一个子线程,并将自己的快照文件复制给子线程,子线程根据快照文件读取共享内存数据到.rdb文件中,读取完成后替换旧的rbd文件进行持久化操作

RDB持久化的优点在于使用子线程来异步持久化,主线程不会进行IO操作,保证了Redis的高性能,而且其存储的是压缩的二进制文件,适用于备份,全量复制,并且其加载速度远大于AOF文件

缺点在于其持久化间隔时间比较长,如果下一次持久化前发生宕机等故障,会造成数据的丢失,即无法做到实时持久化,并且在fork子线程进行持久化时,如果主线程进行修改操作,需要对修改的数据先进行复制,理论上最差的情况是全都复制一遍,即占用两倍的内存。并且RDB二进制文件存在新老版本不兼容的问题.

AOF:AOF持久化是将命令像日志一样写入文件中进行持久化,其持久化策略有三种

其优点在于能将数据丢失的风险大大降低,保证数据是最新的,并且将命令写入文件的操作是异步的,不允许主线程

缺点在于因为是保存所有命令,其文件比RDB大得多,数据恢复其实也就是执行命令的过程,所以会慢很多

混合型持久化的优点在于效率大幅提升,缺点在于最终文件为.aof文件,在4.0版本之前不是被该aof文件,且由于前部分时RDB格式,阅读性差

3.你刚刚说AOF的文件很大,那AOF文件会越来越大?

AOF其实是有他的重写机制的,当AOF文件比上一次重写时的文件大小增长100%并且文件大小不小于64M时,会进行重写,重写时如果客户端发生修改操作,这边也是copy-on-write技术,重写时,新的变更操作会写到原AOF文件中,同时这些变更操作会被Redis收集,最差情况就和RDB一样,;两倍内存,当内存数据被全部写入到新的AOF文件后,新的变更操作会追加进去,此后所有新的操作会写到新的aof文件中,因为只有重写完成后才会更改写入文件,所以如果发生故障,不会影响到原来的aof文件,所有比较可靠


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

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

相关文章

Blender导入下载好的fbx模型像的骨骼像针戳/像刺猬

为什么我下载下来的骨骼模型和我自己绑定的模型骨骼朝向完全不一样 左边是下载的模型 右边是我自己绑定的模型 左边的模型刚刚感觉都是像针一样往外戳的,像刺猬一样那种。 解决方法勾选自动骨骼坐标系

Ubuntu22.04上kdump和crash的使用

0.前言 1.引用: 解决Linux内核问题实用技巧之 - Crash工具结合/dev/mem任意修改内存-腾讯云开发者社区-腾讯云 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 ubuntu内核转储分析——kdump和crash的下载和使用_ubuntu kdump-CSDN博客 U…

linux安全-firewalld防火墙-基础讲解

目录 一、 防火墙技术分类 二、 firewalld 三、 firewalld支持的类型的NAT 四、 富语言 五、 firewalld配置方式 六、 firewall-cmd命令 七、 小实验 这篇文章将对 firewalld 防火墙的基础知识进行介绍 firewalld简介:firewalld的作用是为包过滤机制提供匹配…

Android中使用NSD扫描,实现局域网内设备IP的发现

0. 前言 本文介绍了什么是NSD协议,并介绍了如何在Android中实现NSD的服务端和客户端,实现局域网内的设备发现功能。 1. NSD是什么 在Android开发中,NSD(Network Service Discovery)是一种用于在局域网内发现其他设备…

ROS2 系列学习教程(总目录)

ROS2Learning ROS1 系列学习教程(总目录) 一、ROS2 简介 1.1 ROS2简介及学习资源汇总 二、ROS2 基础 2.1 ROS2安装详细教程(以Humble为例) 2.2 ROS2 构建系统 colcon 介绍、安装与使用 2.3 ROS2 与 ROS1 编码方式对比 ROS2 与 ROS1 编码方式对比&am…

万字长文解读深度学习——VQ-VAE和VQ-VAE-2

🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总 万字长…

Vue 组件通信全面解析

Vue 组件通信全面解析:方式、原理、优缺点及最佳实践 在 Vue 开发中,组件通信是一个重要的核心问题。随着应用复杂度的增加,如何在组件之间有效传递数据、触发事件,直接影响代码的可维护性和可扩展性。Vue 提供了多种组件通信方式…

对力扣77组合优化的剪枝操作的理解

77. 组合 代码随想录放出了这一张图 我乍一看觉得想当然,但是仔细想想,又不知道以下剪枝代码作何解释,因此我想通过这篇文章简要解释一下 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int sta…

SpringMVC其他扩展

一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&#xff0c;…

运行 GreatSQL 时为什么要求关闭透明大页

在大部分运维规范中&#xff0c;一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页&#xff0c;那么到底什么是透明大页&#xff0c;为什么要关闭&#xff0c;打开有什么风险吗&#xff1f; 在此之前&#xff0c;我也是有点懵的&#xff0c;本文试着回答这个疑问&…

日本IT|AWS技术方向都需要做哪些工作呢?

在日本IT行业中&#xff0c;AWS&#xff08;亚马逊网络服务&#xff09;技术方向的工作主要涉及利用AWS提供的各种服务和工具来构建、部署和管理云计算解决方案。具体来说&#xff0c;AWS技术方向的工作内容可能包括但不限于以下几个方面&#xff1a; 架构设计&#xff1a; 根据…

PostgreSQL实现透视表查询

PostgreSQL 8.3版本发布时&#xff0c;引入了一个名为tablefunc的新扩展。这个扩展提供了一组非常有趣的函数。其中之一是交叉表函数&#xff0c;用于创建数据透视表。这就是我们将在本文中讨论的内容。 需求说明 解释此函数如何工作的最简单方法是使用带有数据透视表的示例…

生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件

1. 安装基础库 使用Windows 11标题样式和主题自定义UI窗口库pywinstyles&#xff08;github: https://github.com/Akascape/py-window-styles&#xff09;&#xff0c;结合python自带tkinter库设计一个报告GUI软件。 pip install pywinstyles2. 设计一个简单的Windwos风格的G…

navicat连接mysql 8.0以上版本2059错误

安装了最新版本8.0.4的mysql之后&#xff0c;使用navicat链接提示以下错误。原因是因为mysql8.0 之前的版本中加密规则是 mysql_native_password&#xff0c;而 mysql8.0 之后的版本加密规则是caching_sha2_password 处理方案 解决方案1&#xff1a;下载安装最新版本navicat…

使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像

文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…

【PlantUML系列】类图(一)

目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类&#xff0c;类名后跟大括号&#xff0c;声明类的属性和方法。 属性&#xff1a;格式为{visibility} attributeName : AttributeType…

VR眼镜可视化编程:开启医疗信息系统新纪元

一、引言 随着科技的飞速发展&#xff0c;VR 可视化编程在医疗信息系统中的应用正逐渐成为医疗领域的新趋势。它不仅为医疗教育、手术培训、疼痛管理等方面带来了新的机遇&#xff0c;还在提升患者体验、推动医疗信息系统智能化等方面发挥着重要作用。 在当今医疗领域&#xf…

IS-IS的原理

IS-IS的基本概念&#xff1a; 概述&#xff1a; IS-IS&#xff0c;中间系统到中间系统&#xff0c;是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络&#xff0c;采用数据链路层封装&#xff0c;区别于ospf只支持IP网络&#xff0…

华为ACL应用笔记

1、基本ACL 2000-2999 基本ACL&#xff08;Access Control List&#xff0c;访问控制列表&#xff09;是一种网络安全技术&#xff0c;它根据源IP地址、分片信息和生效时间段等信息来定义规则&#xff0c;对报文进行过滤。 规则&#xff1a; ACL由一系列规则组成&#xff0c;每…

点云标注软件SUSTechPOINTS的安装和使用,自测win10和ubuntu20.04下都可以用

点云标注软件SUSTechPOINTS的安装和使用 github项目源码&#xff1a;https://github.com/naurril/SUSTechPOINTS gitee源码以及使用教程&#xff1a;https://gitee.com/cuge1995/SUSTechPOINTS 首先拉取源码 git clone https://github.com/naurril/SUSTechPOINTS最好是在cond…