Redis持久化机制——针对实习面试

目录

  • Redis持久化机制
    • Redis为什么要有持久化机制?
    • Redis持久化方式有哪些?
    • AOF持久化工作原理是什么?有什么优缺点?
      • AOF持久化工作原理
      • AOF的优点
      • AOF的缺点
    • RDB持久化工作原理是什么?有什么优缺点?
      • RDB持久化工作原理
      • RDB的优点
      • RDB的缺点
    • 如何选择AOF或RDB?
    • Redis4.0对于持久化机制做了什么优化?

Redis持久化机制

在这里插入图片描述

Redis为什么要有持久化机制?

Redis是一个基于内存的高性能键值对数据库,其主要优势在于快速的读写速度。然而,内存是一种易失性存储介质,一旦服务器断电或发生故障,内存中的数据就会丢失。为了解决这个问题,Redis提供了持久化机制,主要有以下几个原因:

  1. 数据保护:持久化确保Redis在发生故障时不会丢失数据。即使服务器崩溃,重启后也能从持久化文件中恢复数据。

  2. 灾难恢复:在系统发生严重故障时,持久化数据可以用于恢复到故障前的状态,减少数据丢失的风险。

  3. 数据备份:持久化文件可以作为数据备份,用于数据迁移、灾难恢复或在不同的Redis实例间同步数据。

  4. 业务需求:某些业务场景要求数据必须持久化存储,以保证数据的长期可用性和一致性。

  5. 审计和合规性:某些行业法规可能要求保留数据记录,持久化机制可以帮助满足这些合规性要求。

  6. 分析和报告:持久化的数据可以用于历史数据分析和报告,这对于业务决策和性能监控非常重要。

  7. 减少数据不一致:在分布式系统中,持久化可以帮助减少数据不一致的问题,确保数据在多个节点间同步。

  8. 提高系统的可用性和可靠性:通过持久化,系统可以在发生故障后快速恢复,提高系统的可用性和可靠性。

Redis持久化方式有哪些?

Redis支持两种持久化方式:
RDB(快照持久化)
AOF(追加文件持久化)

AOF持久化工作原理是什么?有什么优缺点?

AOF持久化工作原理

AOF(Append Only File)持久化是Redis的一种数据持久化方式,其核心思想是记录每次对数据库进行修改的所有写操作命令,并追加到AOF文件中。当Redis服务器重新启动时,通过重新执行AOF文件中的命令来恢复数据。具体来说,AOF持久化的工作原理包括以下几个步骤:

  1. 命令追加:Redis执行的每个写操作命令(如SET、DEL等)都会被追加到AOF缓冲区中。
  2. 文件写入:AOF缓冲区中的内容会根据配置的同步策略,周期性地写入到AOF文件中。
  3. 文件同步:根据配置的同步策略,将AOF文件缓冲区的内容同步到磁盘,确保数据的持久化。

AOF的优点

  1. 数据安全性高:AOF持久化可以提供不同的同步策略,包括每秒同步、每修改同步和不同步,以适应不同的数据安全性需求。在默认的每秒同步策略下,最多只会丢失一秒钟的数据。
  2. 数据恢复能力强:AOF文件是一个只进行追加操作的日志文件,即使部分数据未写入完成,也不会破坏已存在的内容,且可以通过工具修复数据一致性问题。
  3. 可读性和可操作性强:AOF文件以文本方式记录,易于理解和操作,适合做灾难性的误删除紧急恢复。

AOF的缺点

  1. 文件体积大:与RDB相比,AOF文件通常更大,因为它记录了所有的写操作命令,而RDB文件只记录数据的快照
  2. 性能开销:AOF持久化需要对每个写命令进行同步操作,可能会对Redis的性能产生一定影响,尤其是在always同步策略下。
  3. 数据恢复速度慢:由于AOF文件可能非常大,从AOF文件中恢复数据的过程可能会比较慢。

RDB持久化工作原理是什么?有什么优缺点?

RDB持久化工作原理

RDB持久化是指在指定的时间间隔内将Redis内存中的数据集快照写入磁盘,实现原理是Redis服务在指定的时间间隔内先fork一个子进程,由子进程将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,生成dump.rdb文件存放在磁盘中。这个过程主要包括以下几个步骤:

  1. 触发RDB生成:可以通过配置文件中的save指令设置条件自动触发,或者手动执行SAVEBGSAVE命令触发。
  2. Fork子进程:Redis通过fork()系统调用创建一个子进程,这个子进程与父进程共享相同的数据页,但拥有自己的执行线程。
  3. 写入临时文件:子进程将内存中的数据写入到一个临时文件中。
  4. 替换RDB文件:当临时文件写入完成后,原子地替换掉旧的RDB文件。
  5. 清理临时文件:完成替换后,临时文件会被删除。

RDB的优点

  1. 数据备份简单:RDB文件是一个二进制文件,方便备份和恢复
  2. 灾难恢复:RDB文件可以轻松地被压缩后转移到其他存储介质上,适合灾难恢复
  3. 性能最大化:持久化操作由子进程完成,主进程不进行IO操作,避免了对Redis性能的影响。
  4. 启动效率:相比于AOF,RDB在启动时加载数据的速度更快,尤其是数据集较大时。

RDB的缺点

  1. 数据安全性低:RDB是周期性地进行数据快照,如果在两次快照之间Redis发生故障,可能会丢失最后一次快照之后的数据
  2. fork操作的性能开销:当数据集较大时,fork操作可能会非常耗时,并且会暂时占用更多的内存资源
  3. 可能的数据丢失:如果在RDB持久化过程中Redis服务宕机,那么自上次快照以来的所有更改都将丢失。

如何选择AOF或RDB?

在选择AOF或RDB持久化时,可以根据以下几个因素来决定:

  1. 数据安全性

    • 如果业务对数据安全性有较高要求,希望尽可能避免数据丢失,那么应该选择AOF持久化方式。AOF可以配置为每秒持久化或每个命令执行完就持久化,确保数据的安全性。
    • RDB是间隔一段时间进行持久化,如果在这个间隔内发生宕机,数据会丢失,所以对数据安全性要求不高的场景可以考虑使用RDB
  2. 数据恢复速度

    • 如果需要快速恢复数据,或者需要快速恢复大量数据,RDB可能更合适。RDB在恢复大数据集时速度更快,因为它只需要加载一个文件即可恢复整个数据集。
    • AOF的恢复速度可能会慢一些,因为需要逐条执行写操作来恢复数据。
  3. 性能考虑

    • 对于需要高性能的场景,如实时系统,RDB的性能可能更好,因为它避免了频繁的IO操作。
    • AOF的写操作是在主进程中执行的,会对主进程对外提供请求的效率造成影响,可能会降低性能。
  4. 存储空间

    • 如果存储空间有限,需要考虑AOF文件的大小增长问题。AOF文件通常会比RDB文件大,因为它记录了所有的写命令。
    • RDB文件通常较小,因此在备份和存储大规模数据时性能较好。
  5. 备份与迁移

    • 如果需要频繁备份和恢复数据,或者需要快速恢复大量数据,RDB可能更合适。RDB文件是一个紧凑的二进制文件,占用空间小,传输速度快。
    • AOF文件可能会很大,传输速度慢。
  6. 数据可读性

    • 如果要求能够方便地查看和修改数据,推荐AOF。AOF是一个可读的文本文件,记录了所有的写命令,可以用于灾难恢复或者数据分析。
    • RDB是一个二进制文件,不易查看和修改。

综合来看,如果对数据完整性要求高,可以选择AOF;
如果对恢复速度和性能要求高,可以选择RDB。

同时,也可以同时使用AOF和RDB两种持久化方式,以兼顾数据安全性和性能。

Redis4.0对于持久化机制做了什么优化?

Redis 4.0 对于持久化机制的优化主要体现在以下几个方面:

  1. 混合持久化(RDB-AOF)
    Redis 4.0 引入了混合持久化机制,它结合了 RDB 和 AOF 的优点。在这种模式下,AOF 重写时,会先将数据以 RDB 的形式写入 AOF 文件的开头,然后继续以 AOF 的格式记录后续的写操作。这样既可以快速加载数据,又能减少数据丢失的风险

  2. 优化 AOF 重写过程
    在 Redis 4.0 中,AOF 重写的触发条件和处理机制得到了优化。通过配置 auto-aof-rewrite-min-sizeauto-aof-rewrite-percentage 参数,可以更灵活地控制 AOF 重写的触发条件,从而优化性能和存储空间的使用。

  3. Lazy Free 机制
    Redis 4.0 引入了 Lazy Free 机制,用于异步处理删除操作,减少因删除大键或大量键而导致的服务器阻塞。这包括 UNLINK 命令(异步版本的 DEL),以及 FLUSHDB ASYNCFLUSHALL ASYNC 命令,它们允许在后台线程中异步释放内存和删除数据集。

  4. 内存管理命令(MEMORY)
    Redis 4.0 新增了 MEMORY 命令,用于监控和优化内存使用情况。这个命令可以帮助用户更好地理解和管理 Redis 的内存使用,包括内存碎片整理和内存使用统计。

  5. 缓存驱逐策略优化
    Redis 4.0 新增了 Last Frequently Used(LFU)缓存驱逐策略,并对已有的驱逐策略进行了优化,使其更健壮、高效、快速和精确。

  6. SWAPDB 命令
    Redis 4.0 新增了 SWAPDB 命令,允许即时替换同实例下的两个 Redis 数据库,这为数据库管理提供了更大的灵活性。

这些优化使得 Redis 4.0 在持久化方面提供了更好的性能和数据安全性,同时也增强了 Redis 的可管理性和灵活性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【系统架构设计师(第2版)】七、系统架构设计基础知识

有效的软件体系结构及其明确的描述和设计,已成为软件工程领域中重要的主题。 *注:由于历史原因,研究者和工程人员对**Software Architecture(简称SA)*的翻译不尽相同,本文中软件“体系结构”和“架构”具有…

【NLP】使用 SpaCy、ollama 创建用于命名实体识别的合成数据集

命名实体识别 (NER) 是自然语言处理 (NLP) 中的一项重要任务,用于自动识别和分类文本中的实体,例如人物、位置、组织等。尽管它很重要,但手动注释大型数据集以进行 NER 既耗时又费钱。受本文 ( https://huggingface.co/blog/synthetic-data-s…

Google推出了AI驱动的学习工具“Learn About”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Vue3中使用LogicFlow实现简单流程图

实现结果 实现功能&#xff1a; 拖拽创建节点自定义节点/边自定义快捷键人员选择弹窗右侧动态配置组件配置项获取/回显必填项验证 自定义节点与拖拽创建节点 拖拽节点面板node-panel.vue <template><div class"node-panel"><divv-for"(item, k…

本地部署运行 HuggingFace Diffuser 大模型

最近需要篡改大模型验证篡改定位水印的泛化性&#xff0c;但是由于网络连接原因无法直接使用&#x1f917;s Diffusers library &#xff0c;在网上找到了以下本地部署的方法。 目录 下载模型&#xff0c;部署至服务器上 1&#xff09;huggingface官网下载 2&#xff09;gi…

Bert框架详解(下)

一、Bert模型网络结构 1、Add与Normalize Add&#xff1a;将前面的数据传到后面层&#xff0c;残差网络同理。 Normalize &#xff1a;归一化&#xff0c;与batch normalize同理。 2、outputs(shifted right) outputs&#xff08;shifted right&#xff09;&#xff1a;指在…

操作系统学习笔记-3.2虚拟内存

文章目录 虚拟内存请求分页管理方式页面置换算法最佳置换算法工作原理OPT 算法的示例最佳置换算法的优点和缺点 先进先出置换算法最近最久未使用时钟置换算法时钟置换算法的工作原理&#xff1a;算法的步骤&#xff1a; 改进型时钟置换算法改进型时钟置换算法的特点&#xff1a…

【数学】通用三阶矩阵特征向量的快速求法 超简单!!!

目录 三个定理1、3个特征值&#xff08;即根互不相等&#xff09;例题实践2、2个特征值&#xff08;即有一个双重根&#xff09;3、1个特征值&#xff08;即有一个三重根&#xff09;定理证明 三个定理 本定理适用于 所有三阶矩阵 的特征向量求法&#xff01; 1、3个特征值&…

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…

文件系统和日志管理

文件系统和日志管理 文件系统&#xff1a;文件系统提供了一个接口&#xff0c;用户用来访问硬件设备&#xff08;硬盘、光驱&#xff09;------------- 在硬件设备上对文件的管理 1、文件存储在硬盘上&#xff08;机械硬盘&#xff1a;一个扇区 2、文件中硬盘上的最小存储单位…

数据结构---排序总结

1.排序的时间复杂度&#xff08;均为平均值&#xff09; O(n^2) &#xff1a;冒泡排序&#xff0c;选择排序&#xff0c;插入排序。 O(n * log(n))&#xff1a;堆排序&#xff0c;快速排序&#xff0c;归并排序。 O(n^1.3)&#xff1a;希尔排序 2.空间复杂度&#xff1a; O(n) …

数据结构:七种排序及总结

文章目录 排序一插入排序1直接插入排序2希尔排序二选择排序3直接选择排序4堆排序三 交换排序5冒泡排序6快速排序四 归并排序7归并排序源码 排序 我们数据结构常见的排序有四大种&#xff0c;四大种又分为七小种&#xff0c;如图所示 排序&#xff1a;所谓排序&#xff0c;就是…

【操作系统】基于环形队列的生产消费模型

目录 一、单生产单消费 1.环形队列的实现 (1) void P(sem_t &sem); (2) void V(sem_t &sem); (3) RingQueue() (4) ~RingQueue() (5) void Push(const T &in); (6) void Pop(T *out); 2.上层调用逻辑 二、多生产多消费 1.环形队列的实现 (1) RingQueue…

Linux下的WatchDog

看门狗&#x1f415; 看门狗简介 看门狗定时器&#xff08;Watchdog Timer&#xff09;是一种定时器&#xff0c;用于检测系统是否正常运行。如果系统在规定时间内没有向看门狗定时器发送复位信号&#xff0c;看门狗定时器就会产生复位信号&#xff0c;使系统复位。看门狗定时…

基于SpringBoot的速食零食商城+LW示例参考

1.项目介绍 功能模块&#xff1a;管理端&#xff08;用户管理、账号管理、商品分类管理、商品信息管理、订单管理等&#xff09;&#xff0c;用户端&#xff08;商品信息、登录注册、我的订单等&#xff09;技术栈&#xff1a;SpringBoot&#xff0c;thymeleaf&#xff0c;MyB…

springboot020基于Java的免税商品优选购物商城设计与实现

&#x1f345;点赞收藏关注 → 文档最下方联系方式领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 一 、设计说明 1…

认识物联网

新一代信息技术 物联网 物物相连的互联网&#xff0c;即物联网&#xff0c;又称传感器常见的传感器 • 温度传感器 • 压力传感器 • 声音传感器 • 02 • */08521 物联网概念 • 通过射频识别&#xff0c;红外传感器&#xff0c;全球定位系统GPS&#xff0c;激光扫描…

CODESYS可视化桌面屏保-动态气泡制作详细案例

#一个用于可视化(HMI)界面的动态屏保的详细制作案例程序# 前言: 在工控自动化设备上,为了防止由于人为误触发或操作引起的故障,通常在触摸屏(HMI)增加屏幕保护界面,然而随着PLC偏IT化的发展,在控制界面上的美观程度也逐渐向上位机或网页前端方面发展,本篇模仿Windows…

Java基础——反射

反射是框架设计的灵魂 &#xff08;使用的前提条件&#xff1a;必须先得到代表的字节码的Class&#xff0c;Class类用于表示.class文件&#xff08;字节码&#xff09;&#xff09; 翻译成人话就是&#xff1a;反射技术&#xff0c;指的是加载类的字节码到内存&#xff0c;并以…

Node.js——文件上传

文件上传 插件&#xff1a;formidable&#xff0c;地址&#xff1a;https://www.npmjs.com/package/formidable&#xff0c;参考里面with Express.js部分。 html部分截图参考&#xff1a; 用express-generator生成的示例代码&#xff1a; const formidable require(formi…