当前位置: 首页 > news >正文

[面试]关于Redis 的持久化你了解吗

        Redis的持久化是指Redis服务器在关闭或重启时,将内存中的数据保存到磁盘上的一种机制。Redis支持多种持久化方式。


一、RDB(Redis Database)持久化

        RDB持久化是Redis默认采用的持久化方式,它将Redis在某个时间点的数据保存到磁盘上的快照。RDB文件是二进制文件,通过压缩算法来减小文件大小。

工作原理:RDB持久化是通过fork子进程来实现的,将当前内存中的数据直接写入到一个临时文件中,然后再替换现有的RDB文件。在fork子进程之前,Redis会将所有的写操作转发到AOF缓冲区中,以确保数据的一致性。当子进程完成RDB文件的保存后,Redis会将AOF缓冲区中的数据写入到新的AOF文件中,这样就保证了数据的持久化。

  • RDB文件用于将Redis内存中的数据快照保存到磁盘上,以便在Redis服务器重启时能够恢复数据。它是Redis默认的持久化方式之一,通过将所有数据转换为二进制格式并以RDB文件的方式来存储。
  •  AOF缓冲区是一个位于用户空间的内存区域,用于暂时存储Redis服务器执行的写命令。这些写命令随后会被追加到AOF文件中,以便在Redis服务器重启时能够恢复数据。
  •  AOF文件用于记录Redis服务器接收到的所有写命令,这些命令以Redis协议的格式进行存储。当Redis服务器重启时,它会读取AOF文件,并按照其中记录的命令顺序重新执行,以恢复数据库的状态。因此,AOF文件能够确保数据的持久性和可靠性。

触发机制:RDB持久化可以手动触发,也可以自动触发。手动触发通过执行SAVE或BGSAVE命令来实现,其中SAVE命令会阻塞Redis主线程,直到RDB文件创建完毕,而BGSAVE命令则通过创建一个子进程来生成RDB文件,避免阻塞主线程。自动触发则是根据redis.conf配置文件中的规则来自动执行BGSAVE命令,例如“save 900 1”表示在900秒内如果有1个key发生变化,就会触发持久化。

优缺点:RDB持久化的优点是恢复数据的速度较快,因为RDB文件是二进制文件,直接读入内存恢复即可。缺点是可能会丢失最后一次持久化之后的数据,且在恢复大量数据时可能会导致Redis的启动时间较长。

二、AOF(Append Only File)持久

        AOF持久化是将Redis的操作命令追加到一个文件中,这个文件就是AOF文件。AOF文件是一个日志文件,记录了对Redis的操作命令,包括写操作和删除操作。

工作原理:AOF持久化是通过将Redis的每个写操作追加到AOF文件的末尾来实现的。当Redis需要重新加载数据时,只需要将AOF文件中的写操作重新执行一遍即可恢复数据。为了提高效率,Redis会将一些写操作进行合并,以减少文件的大小。当AOF文件变得太大时,Redis会自动进行重写,将AOF文件中的写操作进行压缩。

触发机制:AOF持久化也可以手动触发和自动触发。手动触发通过执行BGREWRITEAOF命令来实现,该命令会创建一个子进程来重写AOF文件。自动触发则是根据配置文件中的规则来自动执行BGREWRITEAOF命令,例如当AOF文件大小超过上一次重写后的一定百分比时。

BGREWRITEAOF是Redis中用于异步执行AOF(Append Only File)文件重写操作的命令

优缺点:AOF持久化的优点是可以保证数据的完整性和一致性,因为AOF文件记录了所有的写操作。缺点是相对于RDB持久化,恢复数据的速度较慢,因为需要重新执行AOF文件中的写操作。同时,AOF文件通常比RDB文件更大。

三、混合持久化(Redis 4.0新增)

        混合持久化结合了RDB的快速加载和AOF的数据安全性。在AOF重写时,会同时使用RDB和AOF两种格式。

工作原理:在AOF重写时,Redis先创建一个当前数据集的RDB快照,并将这个快照写入新的AOF文件的开头。然后,从快照创建开始,之后的写操作以AOF格式追加到文件末尾。这样,最终的AOF文件结构就是[RDB数据][AOF增量数据]。

优缺点:混合持久化的优点是重启时可以快速加载RDB部分来恢复大部分数据,然后执行AOF部分的命令来恢复最新的数据变更。这样既保证了数据的快速恢复,又提供了更好的数据安全性。缺点是AOF文件的大小可能会比单纯的AOF文件大一些,因为包含了RDB快照的数据。但是,由于RDB格式更紧凑,所以通常比单纯的AOF文件小。

四、持久化配置与优化

RDB持久化配置:在redis.conf配置文件中,可以通过修改save规则来配置RDB持久化的触发条件。例如,“save 900 1”表示在900秒内如果有1个key发生变化,就会触发持久化。同时,还可以配置是否开启RDB文件的压缩和校验等功能。

AOF持久化配置:在redis.conf配置文件中,可以通过修改appendonly参数来开启或关闭AOF持久化。同时,还可以配置AOF文件的同步策略(如appendfsync always、appendfsync everysec、appendfsync no)和重写触发条件等。

持久化优化:为了优化Redis的持久化性能,可以采取一些措施。例如,定期清理无用的key以减少数据集的大小;使用更高效的压缩算法来减小RDB文件的大小;合理配置AOF文件的同步策略和重写触发条件等。

        综上,Redis的持久化机制包括RDB持久化、AOF持久化和混合持久化三种方式。每种方式都有其优缺点和适用场景。在实际应用中,可以根据业务需求和系统性能要求来选择合适的持久化方式并进行相应的配置和优化。

相关文章:

[面试]关于Redis 的持久化你了解吗

Redis的持久化是指Redis服务器在关闭或重启时,将内存中的数据保存到磁盘上的一种机制。Redis支持多种持久化方式。 一、RDB(Redis Database)持久化 RDB持久化是Redis默认采用的持久化方式,它将Redis在某个时间点的数据保存到磁盘上…...

Systemd:tmpfiles

Systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles,可以创建、删除和管理临时文件的服务。 $ systemctl list-units --all | grep systemd-tmpfilessystemd-tmpfiles-clean.service load…...

【Flutter 内嵌 android 原生 View以及相互跳转】

Flutter 内嵌 android 原生 View以及相互跳转 一. 内嵌android 原生View二、android 与 flutter 相互跳转 一. 内嵌android 原生View 在android 工程的包名下,也可在MainActivity创建 android 原生view ,继承PlatformView // 1.自定义textview public st…...

python externally-managed-environment 外部管理环境

https://realpython.com/python-virtual-environments-a-primer/?refyaolong.net#why-do-you-need-virtual-environments 简而言之, pip 默认会将您安装的所有外部包放置在 Python 安装路径/site-packages/ 的文件夹中一些Linux 和 macOS操作系统 预装了内部的 P…...

前端 | MYTED单篇TED词汇学习功能优化

文章目录 📚实现效果🐇before🐇after 📚模块实现解析🐇html🐇css🐇javascript 📚实现效果 🐇before 点击TED单篇词汇表按钮,选择对应TED打卡号,…...

64 mysql 的 表锁

前言 我们这里来说的就是 我们在 mysql 这边常见的 几种锁 行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁, 表共享锁, 表排他锁 我们前面了解了行共享锁, 行排他锁, 表意向共享锁, 表意向排他锁 等等相关 我们这里 来看一下 表共享锁, 表排他锁 的获取, 以及 和 其他表级…...

【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)

前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…...

ajax关于axios库的运用小案例

AJAX案例 图书管理 四大功能: 展示图书删除图书编辑图书信息新增图书 步骤 1.bootstrap弹窗来实现新增和编辑图书时出现的弹窗 有两种方案: a.可以用自带的属性来进行弹窗的显示和隐藏 b.可以通过JS进行控制,此操作可以进行自定义&am…...

微搭低代码入门01变量

目录 1 变量的定义2 变量的赋值3 变量的类型4 算术运算符5 字符串的连接6 模板字符串7 检查变量的类型8 解构赋值8.1 数组的解构赋值8.2 对象的解构赋值 9 类型转换9.1 转换为字符串9.2 转换为数字9.3 转换为布尔值 总结 好些零基础的同学,在使用低代码的时候&#…...

盘点2024年10款视频剪辑,哪款值得pick!!

在这个短视频盛行的时代,如何让我们的故事更生动有趣呢?那就要对短视频进行修饰了。这就需要借助视频剪辑工具:而一款好的工具不仅仅是视频的“美颜”,更是创意的灵魂所在!想象一下,运用一款功能齐全的剪辑…...

苹果手机照片批量删除:一键清理,释放空间

在数字化时代,iPhone不仅是我们沟通的桥梁,也是记录生活的重要工具。然而,随着时间的积累,手机中的照片数量不断增加,不仅占用大量存储空间,也让设备变得缓慢。苹果手机照片批量删除成为了一个普遍的需求。…...

《AI 大模型:重塑软件开发新生态》

《AI 大模型:重塑软件开发新生态》 一、AI 大模型引领软件开发新潮流二、AI 大模型在软件开发中的优势(一)提高开发效率(二)减少错误与提升质量(三)激发创新与拓展功能 三、AI 大模型在软件开发…...

uniapp(API-Promise 化)

一、异步的方法,如果不传入 success、fail、complete 等 callback 参数,将以 Promise 返回数据异步的方法,且有返回对象,如果希望获取返回对象,必须至少传入一项 success、fail、complete 等 callback 参数&#xff0c…...

【考研数学 - 数二题型】考研数学必吃榜(数二)

数学二 suhan, 2024.10 文章目录 数学二一、函数❗1.极限1.1求常见极限1.2求数列极限1.2.1 n项和数列极限1.2.2 n项连乘数列极限1.2.3 递推关系定义的数列极限 1.3确定极限式中的参数1.4无穷小量阶的比较 2.连续2.1判断是否连续,不连续则判断间断点类型2.2证明题 二…...

Redis生产问题(缓存穿透、击穿、雪崩)——针对实习面试

目录 Redis生产问题什么是缓存穿透?如何解决缓存穿透?什么是缓存击穿?如何解决缓存击穿?缓存穿透和缓存击穿有什么区别?什么是缓存雪崩?如何解决缓存雪崩? Redis生产问题 什么是缓存穿透&#x…...

android openGL中模板测试、深度测试功能的先后顺序

目录 一、顺序 二、模板测试 1、概念 2、工作原理 3、关键函数 三、深度测试 1、概念 2、工作原理 3、关键函数 三、模板测试和深度测试的先后顺序 一、顺序 在Android OpenGL中,模板测试(Stencil Testing)是在深度测试&#xff0…...

CCF PTA 编程培训师资认证2021年7月真题- C++兑换礼品

【题目描述】 小零和小壹是两个爱玩游戏的小孩,他俩平时最擅长的是解谜游戏,可今天 遇到了一个有点难的算法问题,希望能得到你的帮助。 他们面对的是一个电子装置,正面有 n 个排成一列的按钮,按钮上贴着编号 1~n 号的…...

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令,添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令,添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…...

【taro react】 ---- 常用自定义 React Hooks 的实现【六】之类渐入动画效果的轮播

1. 效果 2. 场景 css 效果实现:可以看到效果图中就是一个图片从小到大的切换动画效果,这个效果很简单,使用 css 的 transform 的 scale 来实现图片的从小到大的效果,切换就更加简单了,不管是 opacity 还是 visibility 都可以实现图片的隐藏和显示的切换。React.Children.m…...

基础算法练习--滑动窗口(已完结)

算法介绍 滑动窗口算法来自tcp协议的一种特性,它的高效使得其也变成了算法题的一种重要考点.滑动窗口的实现实际上也是通过两个指针前后遍历集合实现,但是因为它有固定的解题格式,我将其单独做成一个篇章. 滑动窗口的解题格式: 首先,定义两个指针left和right,与双指针不同的…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...