[面试]关于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 参数,…...

【考研数学 - 数二题型】考研数学必吃榜(数二)
数学二 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)是在深度测试࿰…...

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,与双指针不同的…...

深度学习经典模型之ZFNet
1 ZFNet 1.1 模型介绍 ZFNet是由 M a t t h e w Matthew Matthew D . Z e i l e r D. Zeiler D.Zeiler和 R o b Rob Rob F e r g u s Fergus Fergus在AlexNet基础上提出的大型卷积网络,在2013年ILSVRC图像分类竞赛中以11.19%的错误率获得冠军(实际…...

Linux系统-ubuntu系统安装
作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 这是Linux进阶部分的最后一大章。讲完这一章以后,我们Linux进阶部分讲完以后,我们的Linux操作部分就…...

2-Ubuntu/Windows系统启动盘制作
学习目标: 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器,确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器,理解启动盘的使用场景和注意事项,…...

你使用过哪些MySQL中复杂且使用不频繁的函数?
在MySQL中,除了常用的SELECT、INSERT、UPDATE等基本操作外,还有许多复杂且功能强大的函数,它们能够处理各种复杂的数据处理需求。这些函数虽然在日常开发中可能不常使用,但在特定场景下却能够发挥巨大的作用。下面,我将…...

Redis-07 Redis哨兵
操作实现 此处应该6台虚拟机,其中3台是哨兵,但因为内存限制没有那么多 1.将sentinel文件拷贝到/myredis目录下 2.sentinel.conf文件重要参数 新建配置文件sentinel26379.conf sentinel26380.conf sentinel26381.conf bind 0.0.0.0 daemonize yes pr…...

7.qsqlquerymodel 与 qtableview使用
目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用qtableview控制列宽,行高,隐藏拖拽行列 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *it…...

状态模式(State Pattern)详解
1. 引言 在很多软件系统中,对象的行为往往依赖于其内部状态,而状态的变化又会影响对象的行为。状态模式(State Pattern)为解决这一问题提供了一种优雅的方法。通过将状态的行为封装到独立的状态对象中,可以使得对象在…...

ajax微信静默登录不起效不跳转问题
问题描述: 今天通过ajax调用方式做微信静默登录,发现本地可以跳转,到线上地址死活都不跳转,就像没起作用一般,经许久排查发现,是因为https和http域名的问题,线上只配置了http域名࿰…...

参数估计理论
估计理论的主要任务是在某种信号假设下,估算该信号中某个参数(比如幅度、相位、达到时间)的具体取值。 参数估计:先假定研究的问题具有某种数学模型, 如正态分布,二项分布,再用已知类别的学习样…...

mybatis插入数据运行成功但数据库没有数据,id却在增长,是什么原因??
错误描述: mybatis插入数据运行成功,但是数据库却没有数据,id也在增加 原因:在测试方法上面加了 Transactional 虽然日志显示插入语句执行成功,但可能事务在提交过程中出现了问题。比如在后续的操作中有异常抛出导…...