Redis持久化机制

article/2025/7/28 6:26:29

一. Redis应用概述

Redis是一种高性能的KV键值对存储数据库,通常用作数据库、缓存和消息队列等。它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合。Redis具有快速存取和实时响应的特点,广泛应用于Web开发、大数据处理和实时分析等领域。需要注意的是,Redis是一个内存数据库,数据主要存储在内存中,一旦服务器出现故障或断电,数据可能会丢失。为了解决这个问题,Redis提供了持久化机制,将数据保存到硬盘中,以便在服务器重启后恢复数据。

二. Redis持久化机制

当前,Redis提供了两种持久化机制:RDB(Redis DataBase)和AOF(Append Only File),以及AOF与RDB两者结合的混和模式。

AOF持久化
RDB持久化

1. RDB(Redis DataBase)持久化机制

(1)原理

RDB 是 Redis 默认的持久化方式,它会在指定的时间间隔内将内存中的数据集快照以二进制的形式写入到磁盘中的一个二进制文件(默认文件名为 dump.rdb)。当 Redis 重启时,会读取该文件中的数据来恢复数据库状态。

Redis 可以通过创建快照来获得存储在内存里面的数据在 某个时间点 上的副本。Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本,还可以将快照留在原地以便重启服务器的时候使用。

触发RDB持久化的方式有2种,分别是手动触发自动触发

A. 手动触发

  • 使用save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。示例 :在 Redis 客户端中输入 SAVE 命令,即可手动触发 RDB 持久化。执行成功后,Redis 会返回 “OK”,并生成一个 RDB 文件(默认文件名为 dump.rdb)。

save命令执行过程

  • 使用bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。示例 :在 Redis 客户端输入BGSAVE命令,执行成功后,Redis 返回 “Background saving started”,然后在后台进行 RDB 持久化操作。

bgsave命令执行过程

B. 自动触发

  • Redis.conf中配置save m n配置项,即在m秒内有n次修改时,自动触发bgsave生成rdb文件;
  • 主从复制时,从节点要从主节点进行全量复制时也会触发bgsave操作,生成当时的快照发送到从节点;
  • 执行debug reload命令重新加载Redis时也会触发bgsave操作;
  • 默认情况下执行shutdown命令时,如果没有开启AOF持久化,那么也会触发bgsave操作;
(2)优点
  • 数据完整性要求不高时性能最优 :采用 fork() 机制来执行持久化操作,由父进程负责处理客户端请求,子进程负责将内存中的数据写入到临时 RDB 文件。写入完成后,再替换旧的 RDB 文件,最大限度地避免了父进程的性能损耗,保证了 Redis 服务的高性能。
  • 备份和灾难恢复方便 :一个紧凑的 RDB 文件包含了 Redis 在某个时间点上的完整数据,非常适合进行备份和灾难恢复操作,例如可以将 RDB 文件复制到远程服务器或者存储为历史数据快照。
  • 恢复速度更快 :相较于 AOF 持久化方式,在数据集较大的情况下,RDB 文件恢复数据的速度通常比 AOF 快,因为它是直接根据数据快照进行恢复的,而不需要逐条执行写命令来恢复数据。
(3)缺点
  • 数据安全性较低 :在最后一次成功生成快照之后,如果 Redis 服务出现故障,那么从最后一次快照生成到故障发生期间的数据更新将全部丢失。例如,如果设置 Redis 每小时保存一次 RDB 快照文件,那么在 Redis 故障时可能会丢失最多一小时的数据。
  • 无法记录数据的细粒度变化 :RDB 持久化只能记录某一时刻的数据快照,无法像 AOF 那样记录每个写操作的具体命令,所以在需要精确恢复到某个特定时间点的数据或者在发生数据错误时无法像 AOF 那样通过回放命令来找到问题所在。
(4) 应用场景
  • 对数据安全性要求不高的场景,例如缓存系统,主要关注数据的快速读写性能和恢复速度,而对数据丢失一定的容忍度。
  • 在需要进行定期备份的场景中,RDB 文件可以作为一个完整的数据备份,便于存储到外部存储设备或者进行异地备份。
  • 当 Redis 实例发生故障需要快速恢复时,可以优先考虑使用 RDB 持久化来快速重建数据集。

2. AOF(Append Only File)持久化机制

(1)原理

AOF 持久化方式会记录每一个写操作命令,并以 Redis 协议的格式追加写入到 AOF 文件(默认文件名为 appendonly.aof)中。当 Redis 重启时,会重新执行 AOF 文件中的命令来恢复数据。

在AOF持久化模式中,appendfsync文件同步策略共有三种模式,分别为alwayseverysecno, 以下是这三种模式的说明和对比。

策略描述数据安全性性能影响
always每个命令都同步最高(零丢失)最差
everysec每秒同步一次高(最多丢失1秒数据)中等(推荐)
no由操作系统控制最小
(2) 优点
  • 数据安全性高 :AOF 持久化提供了三种不同的同步策略,分别是每秒同步(everysec)、每个写操作同步(fsync)和让操作系统控制同步(no)。其中每秒同步在性能和数据安全性之间取得了较好的平衡,即使在服务器故障的情况下,最多只会丢失 1 秒钟的数据;而每个写操作同步则可以保证数据的完全持久化,但会对性能产生一定的影响。
  • 适合数据恢复到特定时间点 :由于 AOF 文件记录的是所有的写操作命令,因此可以通过回放这些命令来精确地恢复到某个特定的时间点,这在进行数据修复或者查找数据错误原因时非常有用。
  • AOF 文件的可读性高 :AOF 文件是以 Redis 命令协议的格式保存的,因此可以方便地查看和编辑文件内容,甚至可以手动修改 AOF 文件来纠正数据错误或者进行数据的二次处理。
(3)优点
  • 文件体积较大 :AOF 文件会记录所有的写操作命令,随着时间的推移和数据的不断更新,AOF 文件可能会变得非常庞大,尤其是在写操作频繁的场景下。不过 Redis 提供了 AOF 重写机制来压缩 AOF 文件的体积,但重写过程也需要消耗一定的系统资源。
  • 恢复速度相对较慢 :相比于 RDB 持久化方式,AOF 恢复数据的速度较慢,因为需要逐条执行 AOF 文件中的命令来重建数据集,这可能会导致 Redis 启动时间变长,尤其是在数据量较大的情况下。
(4)应用场景
  • 对数据安全性要求极高的场景,如金融系统、计费系统等,不能容忍数据丢失,即使可能会对性能产生一定的影响。
  • 当需要进行数据的细粒度恢复或者需要查看数据的变化历史时,AOF 持久化是一个很好的选择。
  • 在需要对 Redis 数据进行审计或者分析时,AOF 文件的可读性可以方便地满足这些需求。

3. 混合持久化机制

(1) 原理

混合持久化是 Redis 4.0 及以后版本引入的一种新的持久化方式,它是将 RDB 和 AOF 的优点结合起来。开启混合持久化后,当 AOF 持久化功能开启时,第一次执行 bgsave 命令会像 rdb 持久化一样将内存中的数据库内容快照以二进制的形式写入到临时的 rdb 文件中,但是之后会像 aof 持久化一样将每个写命令追加写入到 aof 缓冲区中。当 Redis 重启时,会优先加载 AOF 模式下的 RDB 快照文件,然后执行 AOF 缓冲区中的写命令来恢复数据。

(2)优点
  • 结合了 RDB 和 AOF 的优势 :既保留了 RDB 文件的快速恢复特性,又兼顾了 AOF 文件的数据安全性和细粒度恢复能力。
  • 优化了性能和数据安全性之间的平衡 :在保证较高数据安全性的同时,通过利用 RDB 快照的快速恢复特性来提高 Redis 重启时的恢复速度,减少恢复时间。
(3)缺点
  • 实现相对复杂 :混合持久化机制的实现相对较为复杂,需要同时处理 RDB 和 AOF 的相关逻辑和流程,增加了 Redis 的内部复杂性。
  • 可能存在兼容性问题 :在一些特定的场景或者旧版本的 Redis 客户端中,可能会出现兼容性问题,需要进行充分的测试和验证。
(4) 应用场景
  • 对于需要兼顾数据恢复速度和数据安全性的场景,混合持久化是一个理想的选择。例如,一些对性能要求较高但同时又不能容忍较多数据丢失的业务系统。
  • 可以作为 RDB 和 AOF 持久化的一种替代方案,在不同的业务场景和需求下灵活配置和使用。

Redis 的持久化机制各有特点和适用场景,我们在业务系统应用中可以根据实际的业务需求和性能要求来选择合适的持久化方式,或者采用混合持久化的方式来达到更好的平衡。

三. Redis持久化配置

Redis的持久化机制可以通过配置文件(通常是redis.conf)进行设置。

AOF持久化配置示例

# 是否开启AOF持久化机制,no表示关闭,yes表示开启  
appendonly yes 
# AOF文件名
appendfilename "appendonly.aof"  # 同步策略(推荐)
appendfsync everysec       
# 增长100%时触发重写
auto-aof-rewrite-percentage 100  
# AOF文件最小重写大小
auto-aof-rewrite-min-size 64mb   
# 加载截断的AOF文件
aof-load-truncated yes      

RDB持久化配置示例

#RDB持久化自动触发条件
save 900 1
save 300 10
save 60 10000
#bgsave持久化失败,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件
stop-writes-on-bgsave-error yes
#rdb文件是否压缩
rdbcompression yes
#写入文件和读取文件时是否开启rdb文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。
rdbchecksum yes
#rdb持久化后存放的文件名
dbfilename dump.rdb
#rdb持久化后文件的存放路径
dir ./

Redis常用的配置项说明

  1. appendonly:该选项用于开启或关闭持久化功能。当值为“yes”时,开启持久化;为“no”时,关闭持久化。默认情况下,该选项为“no”。
  2. appendfilename:AOF持久化文件名。默认值为“appendonly.aof”。你可以根据实际需要修改这个值。
  3. appendfsync:控制AOF文件同步到磁盘的策略。可选值包括“always”(每个写命令都立即同步)、“everysec”(每秒同步一次)和“no”(由操作系统决定何时同步)。默认值为“always”。
  4. save:用于配置RDB持久化。该选项可以设置多个保存点,每个保存点由一个时间间隔和相应的数据修改次数组成。当指定的时间间隔内数据修改次数达到指定次数时,Redis将生成一个RDB文件。示例:save 10 100。表示在10秒内如果数据被修改超过100次,就生成RDB文件。
  5. rdbcompression:RDB文件是否采用压缩方式存储。当值为“yes”时,启用压缩;为“no”时,禁用压缩。默认值为“yes”。
  6. rdbchecksum:RDB文件是否进行校验和。当值为“yes”时,进行校验和;为“no”时,不进行校验和。默认值为“yes”。
  7. dbfilename: RDB持久化文件名。默认值为"dump.rdb",可以根据实际需要自行修改。
    这些配置选项可以在redis.conf文件中进行设置,以满足你的实际需求。根据你的应用场景和性能需求,你可能需要调整这些选项以获得更好的持久化性能和数据安全性。

http://www.hkcw.cn/article/UrbGwbsWVo.shtml

相关文章

VMware使用时出现的问题,此文章会不断更新分享使用过程中会出现的问题

VMware使用时出现的问题,此文章会不断更新分享使用过程中会出现的问题 一、VMware安装后没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告 此文章会不断更新,分享VMware使用过程中出现的问题 如果没找到你的问题可以私信我 一、VMware…

60天python训练计划----day40

DAY 40 训练和测试的规范写法 知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 一.单通道图…

leetcode:479. 最大回文数乘积(python3解法,数学相关算法题)

难度:简单 给定一个整数 n ,返回 可表示为两个 n 位整数乘积的 最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。 示例 1: 输入:n 2 输出:987 解释:99 x 91 9009, 9009 % 1337 …

vue2 + webpack 老项目升级 node v22 + vite + vue2 实战全记录

前言 随着这些年前端技术的飞速发展,几年前的一些老项目在最新的环境下很可能会出现烂掉的情况。如果项目不需要升级,只需要把编译后的文件放在那里跑而不用管的话还好。但是,某一天产品跑过来给你讲要升级某一个功能,你不得不去…

Golang | 运用分布式搜索引擎实现视频搜索业务

把前面所设计好的搜索引擎引用进来开发一个简单的具体的视频搜索业务。代码结构: handler目录:后端接口,负责接收请求并返回结果,不存在具体的搜索逻辑。video_search目录:具体的搜索逻辑存放在这,包括reca…

硬件学习笔记--64 MCU的ARM核架构发展及特点

MCU(微控制器)的ARM核架构是当前嵌入式系统的主流选择,其基于ARM Cortex-M系列处理器内核,具有高性能、低功耗、丰富外设支持等特点。以下是ARM核MCU的主要架构及其发展: 1. ARM Cortex-M系列内核概览 ARM Cortex-M系…

【笔记】Windows 系统安装 Scoop 包管理工具

#工作记录 一、问题背景 在进行开源项目 Suna 部署过程中,执行设置向导时遭遇报错:❌ Supabase CLI is not installed. 根据资料检索,需通过 Windows 包管理工具Scoop安装 Supabase CLI。 初始尝试以管理员身份运行 PowerShell 安装 Scoop…

网络安全-等级保护(等保) 3-2-2 GB/T 28449-2019 第7章 现场测评活动/第8章 报告编制活动

################################################################################ GB/T 28449-2019《信息安全技术 网络安全等级保护测评过程指南》是规定了等级测评过程,是纵向的流程,包括:四个基本测评活动:测评准备活动、方案编制活…

软件测评中心如何确保软件品质?需求分析与测试计划很关键

软件测评中心承担着对软件进行评估、测试和审查的任务,它有一套规范的流程来确保软件的品质,并且能够向客户和开发者提供详实的软件状况分析报告。 需求分析环节 这一环节至关重要,必须与客户和开发团队保持密切交流。我们需要从他们那里精…

【C语言编译与链接】--翻译环境和运行环境,预处理,编译,汇编,链接

目录 一.翻译环境和运行环境 二.翻译环境 2.1--预处理(预编译) 2.2--编译 2.2.1--词法分析 2.2.2--语法分析 2.2.3--语义分析 2.3--汇编 2.4--链接 三.运行环境 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C研发…

matlab实现VMD去噪、SVD去噪,源代码详解

为了更好的利用MATLAB自带的vmd、svd函数,本期作者将详细讲解一下MATLAB自带的这两个分解函数如何使用,以及如何画漂亮的模态分解图。 VMD函数用法详解 首先给出官方vmd函数的调用格式。 [imf,residual,info] vmd(x) 函数的输入: 这里的x是待…

深入理解复数加法与乘法:MATLAB演示

在学习复数的过程中,复数加法与乘法是两个非常基础且重要的概念。复数的加法和乘法操作与我们常见的实数运算有所不同,它们不仅涉及到数值的大小,还有方向和相位的变化。在这篇博客中,我们将通过MATLAB演示来帮助大家更好地理解复…

html+css+js趣味小游戏~Treasure Arena多人竞技(附源码)

下面是一个简单的记忆卡片配对游戏的完整代码&#xff0c;使用HTML、CSS和JavaScript实现&#xff1a; html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

Linux之文件进程间通信信号

Linux之文件&进程间通信&信号 文件文件描述符文件操作重定向缓冲区一切皆文件的理解文件系统磁盘物理结构&块文件系统结构 软硬链接 进程间通信匿名管道命名管道system V共享内存 信号 文件 首先&#xff0c;Linux下一切皆文件。对于大量的文件&#xff0c;自然要…

笔试强训:Day6

一、小红的口罩&#xff08;贪心优先级队列&#xff09; 登录—专业IT笔试面试备考平台_牛客网 #include<iostream> #include<queue> #include<vector> using namespace std; int n,k; int main(){//用一个小根堆 每次使用不舒适度最小的cin>>n>&…

国密SSL证书和国产SSL证书有什么区别

国密SSL证书和国产SSL证书在定义、算法标准、安全性能、兼容性、应用场景及自主可控性等方面存在显著区别&#xff0c;具体分析如下&#xff1a; 定义与背景 国密SSL证书 采用中国自主研发的密码算法&#xff08;如SM2、SM3、SM4&#xff09;&#xff0c;符合国家密码管理局发…

OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序

一、软件介绍 文末提供程序和源码下载 OramaCore 是您的项目、答案引擎、副驾驶和搜索所需的 AI 运行时。 它包括一个成熟的全文搜索引擎、矢量数据库、LLM具有行动计划和推理功能的接口、用于根据数据编写和运行您自己的自定义代理的 JavaScript 运行时&#xff0c;以及更多…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.14 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.14 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 dataframe<-data.frame( strengthc(9.60,9.…

Maven---配置本地仓库

目录 5. 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5.3 找到配置文件路径&#xff0c;使用VSCode方式打开 5.4 新增一行代码 5.5 复制本地仓库路径&#xff0c;设置存储路径 5.1在Maven路径下新建文件夹用于本地仓库存储 5.2 复制本地仓库路径 5…

Docker环境构建:MySQL 双主四从集群

Java系列文章 文章目录 Java系列文章前言一、环境准备与Docker配置1.1 环境配置1.2 目录结构1.3 读写分离1.3.1 读写分离方案1.3.2 自定义Docker网络 二、双主四从节点配置2.1 创建MySQL_1节点2.1.1 Mysql_1容器2.1.2 Navicat创建连接2.1.3 创建配置账户 2.2 创建MySQL_2节点2.…