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

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 的可管理性和灵活性

相关文章:

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

目录 Redis持久化机制Redis为什么要有持久化机制?Redis持久化方式有哪些?AOF持久化工作原理是什么?有什么优缺点?AOF持久化工作原理AOF的优点AOF的缺点 RDB持久化工作原理是什么?有什么优缺点?RDB持久化工作…...

Windows系统服务器怎么设置远程连接?详细步骤

一、什么是Windows远程桌面连接? Windows远程桌面(Remote Desktop)功能使用户能够通过网络连接到另一台Windows计算机,实现远程操作。远程桌面非常适合系统管理员、技术支持人员以及那些需要远程工作的人,它允许用户以图形界面的方式访问远程计算机&…...

【Rust设计模式之建造者模式】

Rust设计模式之建造者模式 什么是建造者模式 什么是建造者模式 即将结构体属性方法与构建解离,使用专门的builder进行建造,说白了就是new和其他的方法分开,集中处理更方便。 直接上代码: #[derive(Debug)] struct children {nam…...

2024中国移动(南京)智算大会暨人工智能产业大会即将盛大启幕

11月9日,2024中国移动(南京)智算大会暨人工智能产业大会将在南京国际博览中心盛大举行。此次盛会将汇聚政界、学界与商界的顶尖力量,共同探讨智能计算与人工智能的未来发展方向,为智能计算与人工智能产业的发展注入新的…...

计算机毕业设计 | SpringBoot咖啡商城 购物采买平台 后台管理软件(附源码)

1,项目背景 1.1 当前的问题和困惑 系统稳定性: 在高并发访问时,商城系统容易出现卡顿、崩溃等问题,影响了用户体验和销售额。支付安全性: 支付环节存在潜在的安全隐患,如何确保支付过程的安全性和用户资金…...

CosyVoice文本转语音:轻松创造个性化音频

CosyVoice文本转语音:轻松创造个性化音频" 要实现一个使用通义语音合成模型CosyVoice将文字转换为音频的图形界面应用,可以使用Python的tkinter库来创建图形用户界面(GUI),并使用requests库来调用CosyVoice的API…...

法语nous sommes

法语短语 “nous sommes” 的词源可以追溯到拉丁语,具体分析如下: 1. “Nous” 的词源: “Nous” 是法语中表示 “我们” 的人称代词,源自拉丁语的 “nos”,它表示 “我们” 的意思。 拉丁语 “nos” 是第一人称复数…...

《化学进展》

《化学进展》主要栏目有:综述,评论,中国化学印记,Mini Accounts等。本刊可供化学及相关学科领域的科研、教学、决策管理人员及研究生阅读。 《化学进展》投稿指南稿件要求   (1)本刊仅接受综述与评论性的…...

CNN和RCNN的关系和区别

RCNN(Region-based Convolutional Neural Network)和 CNN(Convolutional Neural Network)是两种不同的神经网络架构,它们在应用和结构上有所不同。以下是它们之间的主要区别: 1. 基本概念 CNN(…...

Chromium 进程降权和提权模拟示例c++

一、背景知识概念参考微软链接: 强制完整性控制 - Win32 应用程序 |Microsoft 学习 授权) (模拟级别 - Win32 apps | Microsoft Learn DuplicateTokenEx 函数 (securitybaseapi.h) - Win32 apps | Microsoft Learn 本文主要演示 low, medium, high, and system 四…...

【测试语言篇一】Python进阶篇:内置容器数据类型

一、列表 列表(List)是一种有序且可变的容器数据类型。 与集合(Set)不同,列表允许重复的元素。 它方便保存数据序列并对其进行进一步迭代。 列表用方括号创建。 my_list ["banana", "cherry", …...

湘潭大学软件工程专业选修 SOA 期末考试复习(二)

文章目录 回顾序言第一章课后题填空选择简答 第二章课后题填空选择编程 计划第三章课后题填空选择简答编程 第四章课后题填空选择简答编程 第五章课后题填空选择简答编程 第六章课后题说明 第七章课后题填空选择简答编程 第八章课后题填空选择简答编程 第九章课后题填空选择简答…...

改进的正弦余弦算法复现

本文所涉及所有资源均在 传知代码平台 可获取。 目录 一、背景及意义 (一)背包问题背景...

Day13杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> res new Arra…...

【c知道】Hadoop工作原理。

请解释一下Hadoop中MapReduce的工作原理&#xff0c;并说明如何进行MapReduce程序的编写和调试。 Hadoop MapReduce是一种分布式计算模型&#xff0c;它将大规模的数据处理任务分解成一系列小的、独立的任务&#xff08;Map任务&#xff09;和后续的聚合任务&#xff08;Reduce…...

React.lazy() 懒加载

概要 React.lazy() 是 React 16.6 引入的一个功能&#xff0c;用于实现代码分割&#xff08;code splitting&#xff09;。它允许你懒加载组件&#xff0c;即在需要时才加载组件&#xff0c;而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能&#xff0c…...

【自学笔记】神经网络(1)

文章目录 介绍模型结构层&#xff08;Layer&#xff09;神经元 前向传播反向传播Q1: 为什么要用向量Q2: 不用激活函数会发生什么 介绍 我们已经学习了简单的分类任务和回归任务&#xff0c;也认识了逻辑回归和正则化等技巧&#xff0c;已经可以搭建一个简单的神经网络模型了。 …...

c#————扩展方法

关键点&#xff1a; 定义扩展方法的类和方法必须是静态的&#xff1a; 扩展方法必须在一个静态类中定义。扩展方法本身也必须是静态的。第一个参数使用 this 关键字&#xff1a; 扩展方法的第一个参数指定要扩展的类型&#xff0c;并且在这个参数前加上 this 关键字。这个参数…...

前向-后向卡尔曼滤波器(Forward-Backward Kalman Filter)资料汇总

《卡尔曼滤波引出的RTS平滑》参考位置2《卡尔曼滤波系列——&#xff08;六&#xff09;卡尔曼平滑》《关于卡尔曼滤波和卡尔曼平滑关系的理解》——有m语言例程《Forward Backwards Kalman Filter》——Matlab软件《卡尔曼滤波与隐马尔可夫模型》...

云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例

云集电商&#xff0c;一家聚焦于社交电商的电商公司&#xff0c;专注于‘精选’理念&#xff0c;致力于为会员提供超高性价比的全品类精选商品&#xff0c;以“批发价”让亿万消费者买到质量可靠的商品。面对近年来外部环境的变化&#xff0c;公司对成本控制提出了更高要求&…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...