Redis持久化机制——针对实习面试
目录
- Redis持久化机制
- Redis为什么要有持久化机制?
- Redis持久化方式有哪些?
- AOF持久化工作原理是什么?有什么优缺点?
- AOF持久化工作原理
- AOF的优点
- AOF的缺点
- RDB持久化工作原理是什么?有什么优缺点?
- RDB持久化工作原理
- RDB的优点
- RDB的缺点
- 如何选择AOF或RDB?
- Redis4.0对于持久化机制做了什么优化?
Redis持久化机制
Redis为什么要有持久化机制?
Redis是一个基于内存的高性能键值对数据库,其主要优势在于快速的读写速度。然而,内存是一种易失性存储介质,一旦服务器断电或发生故障,内存中的数据就会丢失。为了解决这个问题,Redis提供了持久化机制,主要有以下几个原因:
-
数据保护:持久化确保Redis在发生故障时不会丢失数据。即使服务器崩溃,重启后也能从持久化文件中恢复数据。
-
灾难恢复:在系统发生严重故障时,持久化数据可以用于恢复到故障前的状态,减少数据丢失的风险。
-
数据备份:持久化文件可以作为数据备份,用于数据迁移、灾难恢复或在不同的Redis实例间同步数据。
-
业务需求:某些业务场景要求数据必须持久化存储,以保证数据的长期可用性和一致性。
-
审计和合规性:某些行业法规可能要求保留数据记录,持久化机制可以帮助满足这些合规性要求。
-
分析和报告:持久化的数据可以用于历史数据分析和报告,这对于业务决策和性能监控非常重要。
-
减少数据不一致:在分布式系统中,持久化可以帮助减少数据不一致的问题,确保数据在多个节点间同步。
-
提高系统的可用性和可靠性:通过持久化,系统可以在发生故障后快速恢复,提高系统的可用性和可靠性。
Redis持久化方式有哪些?
Redis支持两种持久化方式:
RDB(快照持久化);
AOF(追加文件持久化)
AOF持久化工作原理是什么?有什么优缺点?
AOF持久化工作原理
AOF(Append Only File)持久化是Redis的一种数据持久化方式,其核心思想是记录每次对数据库进行修改的所有写操作命令,并追加到AOF文件中。当Redis服务器重新启动时,通过重新执行AOF文件中的命令来恢复数据。具体来说,AOF持久化的工作原理包括以下几个步骤:
- 命令追加:Redis执行的每个写操作命令(如SET、DEL等)都会被追加到AOF缓冲区中。
- 文件写入:AOF缓冲区中的内容会根据配置的同步策略,周期性地写入到AOF文件中。
- 文件同步:根据配置的同步策略,将AOF文件缓冲区的内容同步到磁盘,确保数据的持久化。
AOF的优点
- 数据安全性高:AOF持久化可以提供不同的同步策略,包括每秒同步、每修改同步和不同步,以适应不同的数据安全性需求。在默认的每秒同步策略下,最多只会丢失一秒钟的数据。
- 数据恢复能力强:AOF文件是一个只进行追加操作的日志文件,即使部分数据未写入完成,也不会破坏已存在的内容,且可以通过工具修复数据一致性问题。
- 可读性和可操作性强:AOF文件以文本方式记录,易于理解和操作,适合做灾难性的误删除紧急恢复。
AOF的缺点
- 文件体积大:与RDB相比,AOF文件通常更大,因为它记录了所有的写操作命令,而RDB文件只记录数据的快照。
- 性能开销:AOF持久化需要对每个写命令进行同步操作,可能会对Redis的性能产生一定影响,尤其是在
always
同步策略下。 - 数据恢复速度慢:由于AOF文件可能非常大,从AOF文件中恢复数据的过程可能会比较慢。
RDB持久化工作原理是什么?有什么优缺点?
RDB持久化工作原理
RDB持久化是指在指定的时间间隔内将Redis内存中的数据集快照写入磁盘,实现原理是Redis服务在指定的时间间隔内先fork一个子进程,由子进程将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储,生成dump.rdb文件存放在磁盘中。这个过程主要包括以下几个步骤:
- 触发RDB生成:可以通过配置文件中的
save
指令设置条件自动触发,或者手动执行SAVE
或BGSAVE
命令触发。 - Fork子进程:Redis通过
fork()
系统调用创建一个子进程,这个子进程与父进程共享相同的数据页,但拥有自己的执行线程。 - 写入临时文件:子进程将内存中的数据写入到一个临时文件中。
- 替换RDB文件:当临时文件写入完成后,原子地替换掉旧的RDB文件。
- 清理临时文件:完成替换后,临时文件会被删除。
RDB的优点
- 数据备份简单:RDB文件是一个二进制文件,方便备份和恢复。
- 灾难恢复:RDB文件可以轻松地被压缩后转移到其他存储介质上,适合灾难恢复。
- 性能最大化:持久化操作由子进程完成,主进程不进行IO操作,避免了对Redis性能的影响。
- 启动效率:相比于AOF,RDB在启动时加载数据的速度更快,尤其是数据集较大时。
RDB的缺点
- 数据安全性低:RDB是周期性地进行数据快照,如果在两次快照之间Redis发生故障,可能会丢失最后一次快照之后的数据。
- fork操作的性能开销:当数据集较大时,fork操作可能会非常耗时,并且会暂时占用更多的内存资源。
- 可能的数据丢失:如果在RDB持久化过程中Redis服务宕机,那么自上次快照以来的所有更改都将丢失。
如何选择AOF或RDB?
在选择AOF或RDB持久化时,可以根据以下几个因素来决定:
-
数据安全性:
- 如果业务对数据安全性有较高要求,希望尽可能避免数据丢失,那么应该选择AOF持久化方式。AOF可以配置为每秒持久化或每个命令执行完就持久化,确保数据的安全性。
- RDB是间隔一段时间进行持久化,如果在这个间隔内发生宕机,数据会丢失,所以对数据安全性要求不高的场景可以考虑使用RDB。
-
数据恢复速度:
- 如果需要快速恢复数据,或者需要快速恢复大量数据,RDB可能更合适。RDB在恢复大数据集时速度更快,因为它只需要加载一个文件即可恢复整个数据集。
- AOF的恢复速度可能会慢一些,因为需要逐条执行写操作来恢复数据。
-
性能考虑:
- 对于需要高性能的场景,如实时系统,RDB的性能可能更好,因为它避免了频繁的IO操作。
- AOF的写操作是在主进程中执行的,会对主进程对外提供请求的效率造成影响,可能会降低性能。
-
存储空间:
- 如果存储空间有限,需要考虑AOF文件的大小增长问题。AOF文件通常会比RDB文件大,因为它记录了所有的写命令。
- RDB文件通常较小,因此在备份和存储大规模数据时性能较好。
-
备份与迁移:
- 如果需要频繁备份和恢复数据,或者需要快速恢复大量数据,RDB可能更合适。RDB文件是一个紧凑的二进制文件,占用空间小,传输速度快。
- AOF文件可能会很大,传输速度慢。
-
数据可读性:
- 如果要求能够方便地查看和修改数据,推荐AOF。AOF是一个可读的文本文件,记录了所有的写命令,可以用于灾难恢复或者数据分析。
- RDB是一个二进制文件,不易查看和修改。
综合来看,如果对数据完整性要求高,可以选择AOF;
如果对恢复速度和性能要求高,可以选择RDB。
同时,也可以同时使用AOF和RDB两种持久化方式,以兼顾数据安全性和性能。
Redis4.0对于持久化机制做了什么优化?
Redis 4.0 对于持久化机制的优化主要体现在以下几个方面:
-
混合持久化(RDB-AOF):
Redis 4.0 引入了混合持久化机制,它结合了 RDB 和 AOF 的优点。在这种模式下,AOF 重写时,会先将数据以 RDB 的形式写入 AOF 文件的开头,然后继续以 AOF 的格式记录后续的写操作。这样既可以快速加载数据,又能减少数据丢失的风险。 -
优化 AOF 重写过程:
在 Redis 4.0 中,AOF 重写的触发条件和处理机制得到了优化。通过配置auto-aof-rewrite-min-size
和auto-aof-rewrite-percentage
参数,可以更灵活地控制 AOF 重写的触发条件,从而优化性能和存储空间的使用。 -
Lazy Free 机制:
Redis 4.0 引入了 Lazy Free 机制,用于异步处理删除操作,减少因删除大键或大量键而导致的服务器阻塞。这包括UNLINK
命令(异步版本的DEL
),以及FLUSHDB ASYNC
和FLUSHALL ASYNC
命令,它们允许在后台线程中异步释放内存和删除数据集。 -
内存管理命令(MEMORY):
Redis 4.0 新增了MEMORY
命令,用于监控和优化内存使用情况。这个命令可以帮助用户更好地理解和管理 Redis 的内存使用,包括内存碎片整理和内存使用统计。 -
缓存驱逐策略优化:
Redis 4.0 新增了 Last Frequently Used(LFU)缓存驱逐策略,并对已有的驱逐策略进行了优化,使其更健壮、高效、快速和精确。 -
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,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> res new Arra…...
【c知道】Hadoop工作原理。
请解释一下Hadoop中MapReduce的工作原理,并说明如何进行MapReduce程序的编写和调试。 Hadoop MapReduce是一种分布式计算模型,它将大规模的数据处理任务分解成一系列小的、独立的任务(Map任务)和后续的聚合任务(Reduce…...
React.lazy() 懒加载
概要 React.lazy() 是 React 16.6 引入的一个功能,用于实现代码分割(code splitting)。它允许你懒加载组件,即在需要时才加载组件,而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能,…...

【自学笔记】神经网络(1)
文章目录 介绍模型结构层(Layer)神经元 前向传播反向传播Q1: 为什么要用向量Q2: 不用激活函数会发生什么 介绍 我们已经学习了简单的分类任务和回归任务,也认识了逻辑回归和正则化等技巧,已经可以搭建一个简单的神经网络模型了。 …...
c#————扩展方法
关键点: 定义扩展方法的类和方法必须是静态的: 扩展方法必须在一个静态类中定义。扩展方法本身也必须是静态的。第一个参数使用 this 关键字: 扩展方法的第一个参数指定要扩展的类型,并且在这个参数前加上 this 关键字。这个参数…...
前向-后向卡尔曼滤波器(Forward-Backward Kalman Filter)资料汇总
《卡尔曼滤波引出的RTS平滑》参考位置2《卡尔曼滤波系列——(六)卡尔曼平滑》《关于卡尔曼滤波和卡尔曼平滑关系的理解》——有m语言例程《Forward Backwards Kalman Filter》——Matlab软件《卡尔曼滤波与隐马尔可夫模型》...

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

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...