【Redis】Redis 的持久化策略

news2025/7/26 14:33:21

目录

一、RDB 定期备份

1.2 触发方式

1.2.1 手动触发

1.2.2.1 自动触发 RDB 持久化机制的场景

1.2.2.2 检查是否触发

1.2.2.3 线上运维配置

1.3 检索工具

1.4 RDB 备份实现原理

1.5 禁用 RDB 快照

1.6 RDB 优缺点分析

二、AOF 实时备份

2.1 配置文件解析

2.2 开启 AOF

2.3 持久化原理解析

2.3.1 AOF 写回策略

2.3.2 重写策略

三、RDB-AOF混合持久化

3.1 RDB-AOF混合持久化


Redis 支持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

Redis是一个内存数据库(把数据存储到内存中--->效率高)。要想做到持久化存储,就需要让Redis把数据存储到硬盘上。当查询某个数据时,直接从内存中存取。当 Redis 重启后,通过读取硬盘的数据恢复内存中的数据。

一、RDB 定期备份

RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB 文件,默认是保存在当前运行目录(dump.rdb)。RDB定期把 Redis 内存中的所有数据,都写入硬盘中形成一个“快照”。Redis给内存中当前存储的数据,赶快拍个照片,生成一个文件存储在硬盘中。后续Redis一旦重启后,就可以根据刚才的“快照”把内存中的数据恢复回来。

1.1 配置文件解析

Redis 7 之前的配置:

  • Save 900 1 :每隔 900s(15分),如果有超过 1 个 key 发生了变化,就写一份新的RDB文件
  • Save 300 10:每隔 900s(5分),如果有超过 10 个 key 发生了变化,就写一份新的RDB文件
  • Save 60 10000:每隔 60s(1分),如果有超过 10000 个key发生了变化,就写一份新的RDB文件

Redis7 的配置:

  • Save 3600 1 :每隔 3600s(1小时),如果有超过 1 个 key 发生了变化,就写一份新的RDB文件
  • Save 300 100:每隔 300s(5分),如果有超过 100 个 key 发生了变化,就写一份新的RDB文件
  • Save 60 10000:每隔 60s(1分),如果有超过 10000 个key发生了变化,就写一份新的RDB文件

1.2 触发方式

1.2.1 手动触发

1. save执行save的时候,主程序会阻塞当前 Redis 服务器,直到持久化工作完成。执行 save 命令期间,Redis 不能处理其他命令,对于内存比较大的实例会造成长时间阻塞,线上禁止使用。运行 save 命令对应的 Redis 日志如下:

2. bgsaveRedis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。由于这个过程是子进程在后台完成,这就允许主进程同时进行数据的修改。此时进行的复制过程性能开销其实是挺小的。因为fork在进行内存拷贝的时候,是通过“写时拷贝”的机制完成的。

1. 执行 bgsave 命令,Redis 父进程判断当前是否存在正在执行的子进程,如 RDB/AOF 子进程,如果存在 bgsave 命令直接返回。

2. 父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒。

3. 父进程fork完成后,bgsave命令返回“Background saving started(表示子进程开始执行RDB备份)”信息并不再阻塞父进程,可以继续响应其他命令。

4. 子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。执行 lastsave 命令可以获取最后一次生成RDB 的时间,对应 info 统计的 rdb_last_save_time 选项。

5. 进程发送信号给父进程表示完成,父进程更新统计信息,具体见info Persistence下的rdb_*相关选项。info Persistence

显然bgsave命令是针对save阻塞问题做的优化。因此Redis内部所有的涉及RDB的操作都采用bgsave的方式,而save命令已经废弃

1.2.2 自动触发

按照 redis.conf 里配置的进行修改,让 Redis 每隔多长时间/每产生多少次修改就触发。Redis 生成的 rdb 文件是存放在 Redis 的工作目录中的,也是在Redis配置文件中,进行设置的。由于生成一次 RDB 操作是一个比较高的成本,不能让这个操作执行的太频繁。但是正因为生成的不太频繁,实际当前的数据和快照的数据可能存在一些偏差。

“save m n”。表示m秒内数据集存在 n 次修改时,自动触发 bgsave。

修改配置文件后,我们一定要重新启动服务器才能生效。然后根据我们的设置触发备份的条件触发。将备份文件(dump.rdb)移动到Redis安装目录并启动服务即可。重新启动后,Redis服务器会尝试加载RDB文件的内容,恢复了内存中之前的内容。如果发现格式错误,就可能会加载数据失败。

注意:

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

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决

    20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决 2025/6/7 17:20 缘起: 1、根据RK809的DATASHEET,短按开机【100ms/500ms】/长按关机,长按关机。6s/8s/10s 我在网上找到的DATASHE…

    浏览器工作原理01 [#]Chrome架构:仅仅打开了1个页面,为什么有4个进程

    引用 浏览器工作原理与实践 Chrome打开一个页面需要启动多少进程?你可以点击Chrome浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”,这将打开Chrome的任务管理器的窗口,如下图 和Windows任务管…

    智能问数Text2SQL Vanna windows场景验证

    架构 Vanna 是一个开源 Python RAG(检索增强生成)框架,用于 SQL 生成和相关功能。 机制 Vanna 的工作过程分为两个简单步骤 - 在您的数据上训练 RAG“模型”,然后提出问题,这些问题将返回 SQL 查询,这些查…

    【VLAs篇】02:Impromptu VLA—用于驱动视觉-语言-动作模型的开放权重和开放数据

    项目描述论文标题Impromptu VLA:用于驱动视觉-语言-动作模型的开放权重和开放数据 (Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models)研究问题自动驾驶的视觉-语言-动作 (VLA) 模型在非结构化角落案例场景中表现不佳&#xf…

    [学习笔记]使用git rebase做分支差异化同步

    在一个.NET 项目中,使用了Volo.Abp库,但出于某种原因,需要源码调试,因此,使用源码方式集成的项目做了一个分支archive-abp-source 其中引用方式变更操作的提交为:7de53907 后续,在master分支中…

    【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数

    【Linux应用】Linux系统日志上报服务,以及thttpd的配置、发送函数 文章目录 thttpd服务安装thttpd配置thttpd服务thttpd函数日志效果和文件附录:开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADX…

    Jmeter(四) - 如何在jmeter中创建网络测试计划

    1.简介 如何创建基本的 测试计划来测试网站。您将创建五个用户,这些用户将请求发送到JMeter网站上的两个页面。另外,您将告诉用户两次运行测试。 因此,请求总数为(5个用户)x(2个请求)x&#xff…

    2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题

    2025年上海市“星光计划”第十一届职业院校技能大赛 网络安全赛项技能操作模块样题 (二)模块 A:安全事件响应、网络安全数据取证、应用安全、系统安全任务一:漏洞扫描与利用:任务二:Windows 操作系统渗透测试 :任务三&…

    Modbus转ETHERNET IP网关:快速冷却系统的智能化升级密钥

    现代工业自动化系统中,无锡耐特森Modbus转Ethernet IP网关MCN-EN3001扮演着至关重要的角色。通过这一技术,传统的串行通讯协议Modbus得以在更高速、更稳定的以太网环境中运行,为快速冷却系统等关键设施的自动化控制提供了强有力的支撑。快速冷…

    Linux——TCP和UDP

    一、TCP协议 1.特点 TCP提供的是面向连接、可靠的、字节流服务。 2.编程流程 (1)服务器端的编程流程 ①socket() 方法创建套接字 ②bind()方法指定套接字使用的IP地址和端口。 ③listen()方法用来创建监听队列。 ④accept()方法处理客户端的连接…

    Android Settings 数据库生成、监听与默认值配置

    一、Settings 数据库生成机制​ ​传统数据库生成(Android 6.0 前)​​ ​路径​:/data/data/com.android.providers.settings/databases/settings.db​创建流程​: ​SQL 脚本初始化​:通过 sqlite 工具创建数据库文件…

    SeaweedFS S3 Spring Boot Starter

    SeaweedFS S3 Spring Boot Starter 源码特性环境要求快速开始1. 添加依赖2. 配置文件3. 使用方式方式一:注入服务类方式二:使用工具类 API 文档SeaweedFsS3Service 主要方法SeaweedFsS3Util 工具类方法 配置参数运行测试构建项目注意事项集成应用更多项目…

    智慧城市项目总体建设方案(Word700页+)

    1 背景、现状和必要性 1.1 背景 1.1.1 立项背景情况 1.1.2 立项依据 1.2 现状 1.2.1 党建体系运行现状 1.2.2 政务体系运行现状 1.2.3 社会治理运行现状 1.2.4 安全监管体系现状 1.2.5 环保体系运行现状 1.2.6 城建体系运行现状 1.2.7 社区体系运行现状 1.2.8 园区…

    详解ZYNQ中的 RC 和 EP

    详解ZYNQ中的 RC 和 EP 一、ZYNQ FPGA 开发板基础( ZC706 ) 1. 核心特点 双核大脑 灵活积木: ZC706 集成了 ARM Cortex-A9 双核处理器(相当于电脑 CPU)和 FPGA 可编程逻辑单元(相当于可自定义的硬件积木…

    STM32CubeMX-H7-19-ESP8266通信(中)--单片机控制ESP8266实现TCP地址通信

    前言 上篇文章我们已经能够使用串口助手实现esp8266的几种通信,接下来我们使用单片机控制实现。这篇文章会附带教程,增加.c和,.h,把串口和定时器放到对应的编号,然后调用初始化就可以使用了。 先讲解,然后末尾再放源码…

    【汇编逆向系列】四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型

    一、汇编代码 上一节开始,讲到了很多debug编译独有的汇编方式,为了更好的区分release的编译器优化和debug的区别,从本章节开始将会提供debug和release的汇编用作对比 Debugb编译 single_double_param:00000000000000A0: F2 0F 11 44 24 08…

    【AI学习】wirelessGPT多任务无线基础模型摘要

    收看了关于WirelessGPT多任务无线基础模型的演讲视频,边做一个记录。 应该说,在无线通信大模型的探索方面,有一个非常有益的尝试。 在沈学明院士带领下开展 https://www.chaspark.com/#/live/1125484184592834560

    docker 部署redis集群 配置

    docker的网络模式 网桥模式每次重启容器都有可能导致容器ip地址变化,需要固定ip的自己自定义网络,这里介绍的是默认网络模式 docker创建容器 docker run --name redis6379 -p 6379:6379 -p 16379:16379 -v /etc/redis/redis6379:/etc/redis -d --r…

    Ansys Maxwell:线圈和磁体的静磁 3D 分析

    本博客展示了如何在 Ansys Maxwell 中执行静磁 3D 分析,以计算载流线圈和永磁体之间相互作用产生的扭矩。在这个例子中,线圈中的电流产生一个沿 Y 轴指向的磁场,而永磁体沿 X 轴被磁化。这种配置导致围绕 Z 轴的扭矩。分步工作流程包括构建几…

    【计算机网络】SDN

    SDN这种新型网络体系结构的核心思想:把网络的控制层面与数据层面分离,而让控制层面利用软件来控制数据层面中的许多设备。 OpenFlow协议可以被看成是SDN体系结构中控制层面与数据层面之间的通信接口。 在SDN中取代传统路由器中转发表的是“流表”&…