Redis的持久化:RDB和AOF机制
概述
Redis 提供 RDB 和 AOF 两种持久化机制
,它们在数据安全性、性能、恢复速度等方面有显著差异。
为什么要进行持久化?如果是大数据量的恢复,会有下述的影响
- 会对数据库带来巨大的压力,
- 数据库的性能不如Redis。导致程序响应慢
- 实现数据的持久化,避免从后端数据库中恢复数据
RDB(Redis Database)
核心原理
RDB持久化是把当前进程数据生成快照保存到磁盘上的过程
,由于是某一时刻的快照,那么快照中的值要早于或者等于内存中的值
- RDB文件默认为当前工作目录下的dump.rdb,可以根据配置文件中的dbfilename和dir设置RDB的文件名和文件位置
触发方式
有下述两种触发方式
- 手动触发:分别对应save和bgsave命令
- 自动触发:以下4种情况时会自动触发
手动触发
手动触发:分别对应save和bgsave命令
save命令:阻塞当前Redis服务器,直到RDB过程完成为止
,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用
bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束
。阻塞只发生在fork阶段,一般时间很短
fork()是由操作系统提供的函数,作用是创建当前进程的一个副本作为子进程
- fork一个子进程,子进程会把数据集先写入临时文件,写入成功之后,再替换之前的RDB文件,用二进制压缩存储,这样可以保证RDB文件始终存储的是完整的持久化内容
自动触发
自动触发:以下4种情况时会自动触发
-
redis.conf中配置save m n
,即在m秒内有n次修改时,自动触发bgsave生成rdb文件;save <seconds> <changes>
表示在seconds秒内,至少有changes次变化,就会自动触发gbsave命令 -
主从复制时
,从节点要从主节点进行全量复制时也会触发bgsave操作,生成当时的快照发送到从节点 -
执行debug reload命令
重新加载redis时也会触发bgsave操作; -
默认情况下执行shutdown命令时
,如果没有开启aof持久化,那么也会触发bgsave操作;
AOF(Append-Only File)
核心原理
AOF日志采用写后日志,即先写内存,后写日志
- AOF持久化会把被执行的写命令写到AOF文件的末尾,记录数据的变化。
- 默认情况下,Redis是没有开启AOF持久化的,
- 开启后,每执行一条更改Redis数据的命令,都会把该命令追加到AOF文件中,这是会降低Redis的性能,但大部分情况下这个影响是能够接受的,
- 另外使用较快的硬盘可以提高AOF的性能
配置方式
通过配置redis.conf文件开启AOF持久化
# appendonly参数开启AOF持久化
appendonly no# AOF持久化的文件名,默认是appendonly.aof
appendfilename "appendonly.aof"# AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的
dir ./# 同步策略
# appendfsync always
appendfsync everysec
# appendfsync no# aof重写期间是否同步
no-appendfsync-on-rewrite no# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb# 加载aof出错如何处理
aof-load-truncated yes# 文件重写策略
aof-rewrite-incremental-fsync yes
AOF实现步骤
AOF需要记录Redis的每个写命令,步骤为:
-
命令追加(append)
:启AOF持久化功能后,服务器每执行一个写命令,都会把该命令以协议格式先追加到aof_buf缓存区的末尾不是直接写入文件,避免每次有命令都直接写入硬盘,减少硬盘IO次数
-
文件写入(write),文件同步(sync)
:何时把aof_buf缓冲区的内容写入保存在AOF文件中,Redis提供了多种策略,appendfsync选项的默认配置为everysec,即每秒执行一次同步appendfsync always
:将aof_buf缓冲区的所有内容写入并同步到AOF文件,每个写命令同步写入磁盘appendfsync everysec
:将aof_buf缓存区的内容写入AOF文件,每秒同步一次,该操作由一个线程专门负责appendfsync no
:将aof_buf缓存区的内容写入AOF文件,什么时候同步由操作系统来决定
AOF的同步策略是涉及到操作系统的write函数和fsync函数的
AOF重写
AOF会记录每个写命令到AOF文件,随着时间越来越长,AOF文件会变得越来越大
。
为了解决AOF文件体积膨胀的问题,Redis提供AOF文件重写机制来对AOF文件进行“瘦身”
。
AOF重写的目的就是减小AOF文件的体积
Redis通过创建一个新的AOF文件来替换现有的AOF,新旧两个AOF文件保存的数据相同,但新AOF文件没有了冗余命令
-
时间长了,AOF文件中通常会有一些冗余命令,
比如:过期数据的命令、无效的命令(重复设置、删除)、多个命令可合并为一个命令(批处理命令)。
-
所以AOF文件是有精简压缩的空间的
文件重写可分为手动触发和自动触发,
手动触发执行bgrewriteaof命令
,该命令的执行跟bgsave触发快照时类似的,都是先fork一个子进程做具体的工作自动触发会根据auto-aof-rewrite-percentage和auto-aof-rewrite-min-size 64mb配置来自动执行bgrewriteaof命令
RDB vs AOF
维度 | RDB | AOF |
---|---|---|
数据安全性 | 低(依赖快照周期) | 高(可配置秒级同步) |
性能影响 | 低(后台异步) | 中高(同步写盘/重放命令) |
恢复速度 | 快(直接加载二进制) | 慢(逐条执行命令) |
文件体积 | 小(压缩存储) | 大(需重写优化) |
适用场景 | 容灾备份/快速恢复 | 金融级数据安全要求 |
相关文章:
Redis的持久化:RDB和AOF机制
概述 Redis 提供 RDB 和 AOF 两种持久化机制,它们在数据安全性、性能、恢复速度等方面有显著差异。 为什么要进行持久化?如果是大数据量的恢复,会有下述的影响 会对数据库带来巨大的压力,数据库的性能不如Redis。导致程序响应慢…...

微调ModernBERT为大型语言模型打造高效“过滤器”
ModernBERT(2024 年 12 月)是最近发布的小型语言模型,由 Answer.AI、LightOn 和 HuggingFace 共同开发。它利用了现代优化技术,如用于 8,192 token 上下文窗口的 RoPE 和 GeGLU layers,在保持效率的同时提升性能。jina…...
数据库查询中的分页实现:Page对象与Pageable接口详解
文章目录 前言1. 分页查询的核心概念1.1 Page对象1.2 Pageable接口2. 实现代码详解2.1 实体类定义2.2 Repository接口定义2.3 服务层实现2.4 控制器层实现3. 关键点解析3.1 Pageable对象的创建3.2 Page对象的常用方法3.4 错误用法示例4.完整示例输出4.1 基本分页查询输出4.2 条…...

各大编程语言基本语法区别
1:语言特点 函数式语言和面向对象语言的区别:函数式用函数直接进行操作,面向对象用object.method()进行操作;如:len() <=> object.length() C 语言:1)C 语言可以像汇编语言一样对位、字节和地址进行操作;2)有函数原型;3)具有大量的数值类型;4)函数是C语言…...

云计算中的虚拟化:成本节省、可扩展性与灾难恢复的完美结合
云计算中虚拟化的 4 大优势 1. 成本效益 从本质上讲,虚拟化最大限度地减少了硬件蔓延。团队可以将多个虚拟机整合到单个物理主机上,而不是为每个工作负载部署单独的服务器。这大大减少了前期硬件投资和持续维护。 结果如何?更低的功耗、更低…...

【Java ee初阶】网络原理
TCP协议 1.确认应答 实现可靠传输的核心机制 2.超时重传 实现可靠传输的核心机制 3.连接管理 网络部分最高频的面试题 4.滑动窗口 提高传输效率的机制 5.流量控制 依据接收方的处理能力,限制发送方的发送速度。 6.拥塞控制 依据传输链路的处理能力,…...
MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?
MongoDB 是一个面向文档的数据库,它的核心概念与传统的关系型数据库(RDBMS)有所不同。以下是它的四个主要核心概念: 文档 (Document) 定义: 文档是 MongoDB 中的基本数据单元。它类似于关系型数据库中的一行记录&#…...
Spring 事件监听机制的使用
文章目录 1. 创建自定义事件2. 发布事件3. 监听事件4. 异步事件 1. 创建自定义事件 事件可以是任意对象(Spring 4.2支持POJO),或继承ApplicationEvent(旧版)。 // 自定义事件(POJO形式,无需继…...

awesome-digital-human本地部署及配置:打造高情绪价值互动指南
在数字化交互的浪潮中,awesome-digital-human-live2d项目为我们打开了本地数字人互动的大门。结合 dify 聊天 api,并借鉴 coze 夸夸机器人的设计思路,能为用户带来充满情绪价值的交互体验。本文将详细介绍其本地部署步骤、dify 配置方法及情绪…...
WebSocket与Socket.IO实现简易客服聊天系统全解析
WebSocket结合Socket.IO实现简易客服聊天系统全解析 一、技术选型对比 技术优点缺点适用场景原生WebSocket浏览器原生支持,性能好API较底层,需手动处理断线重连等逻辑简单实时应用Socket.IO自动重连,房间管理,兼容性好体积较大&…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]: 获取macOS App的Bundle路径信息.
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
C++取时间戳窗口
应用场景 防止接口在指定的时间内重复调用,比如 10 秒内不能重复调用。 函数实现 #include <chrono>/// brief 计算当前时间戳所属时间窗口的起始点(对齐到 Window 秒的整数倍) /// param Window 时间窗口长度(单位&…...

第26节:卷积神经网络(CNN)-数据增强技术(PyTorch)
1. 引言 在深度学习领域,数据增强(Data Augmentation)是提升卷积神经网络(CNN)性能的关键技术之一。通过人为地扩展训练数据集,数据增强能够有效提高模型的泛化能力,防止过拟合,特别是在训练数据有限的情况下。本文将全面介绍PyTorch框架下的数据增强技术,包括基本原理、…...

求助求助,重金酬谢
如图,我先在服务器上运行一个 dock 容器,然后用 nohup 命令把 auto_run.py 程序挂起,然后我查了一下是在 12 端口运行的,这时候我关闭命令窗口,我再重新打开运行 docker 容器就找不到挂起的进程了!这是为什…...
【生产实践】Dolphinscheduler集群部署后Web控制台不能登录问题解决
太长不看版 问题描述: Dolphinscheduler按生产手册使用一键脚本集群部署后,控制台登录页面可以打开,但使用默认账户怎么都登录不进去,尝试在数据库中清理登录用户字段,发现数据库中并没有相关用户字段,而后…...
【东枫科技】使用LabVIEW进行深度学习开发
文章目录 DeepLTK LabVIEW深度学习工具包LabVIEW中的深度神经网络**功能与特性****功能亮点:** **支持的网络层****支持的网络架构****参考示例** 授权售价 DeepLTK LabVIEW深度学习工具包 LabVIEW中的深度神经网络 功能亮点: 在 LabVIEW 中创建、配置…...
PYTHON训练营DAY25
BUG与报错 一、try else try:# 可能会引发异常的代码 except ExceptionType: # 最好指定具体的异常类型,例如 ZeroDivisionError, FileNotFoundError# 当 try 块中发生 ExceptionType 类型的异常时执行的代码 except: # 不推荐:捕获所有类型的异常&…...

Axure :基于中继器的列表删除 、 列表编辑
文章目录 I 列表删除思路操作说明II 列表编辑功能思路修改按钮的交互操作说明编辑页面的保存按钮交互设置取消标记I 列表删除 思路 中继器删除行交互事件; 操作说明 在操作列中添加删除标签,同步添加鼠标点击交互事件 在交互事件中插入中继器删除行动作 多选删除,勾选已标…...

基于GPUGEEK 平台进行深度学习
一、平台简介 GPUGEEK 是一个专注于提供 GPU 算力租赁服务的平台,在人工智能与深度学习领域为用户搭建起便捷的算力桥梁。它整合了丰富多样的 GPU 资源,涵盖 RTX - 4090、RTX - 3090、A100 - PCIE 等多种型号,满足不同用户在模型训练、数据处…...

【多模态】IMAGEBIND论文阅读
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 IMAGEBIND 多模态论文梗概 IMAGEBIND是一种夸模态的神经网络,以图片为中心,联合六中模态的网络(图片、文…...

LeetCode LCR 007. 三数之和 (Java)
题目描述 给定一个整数数组 nums,判断是否存在三个元素 a, b, c,使得 a b c 0?找出所有满足条件且不重复的三元组。 解题思路 核心方法:排序 双指针 排序:首先将数组排序,便于后续去重和双指针操作。…...

VTK|类似CloudCompare的比例尺实现1-源码分析
文章目录 CloudCompare源码分析void ccGLWindowInterface::drawScale(const ccColor::Rgbub& color)🧩 总体功能🧠 函数逐步解析✅ 1. 断言只在正交模式下使用✅ 2. 计算显示的实际长度✅ 3. 字体和图形区域准备✅ 4. 计算比例尺图形的绘制位置✅ 5.…...

电子电器架构 --- 车载以太网拓扑
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

phpstorm2024.3 设置中文
要在 PhpStorm 2024.3 中设置中文界面,你可以按照以下步骤进行操作。请注意,PhpStorm 2024.3 版本可能已经包括了中文语言包,但如果你使用的是较早的版本,可能需要下载额外的语言包。 方法一:直接在设置中切换&#x…...
Spring Boot 的 CommandLineRunner
Spring Boot 的 CommandLineRunner 是用于在应用程序启动后执行初始化逻辑的核心接口,以下为综合说明: 一、定义与作用 CommandLineRunner 是 Spring Boot 提供的函数式接口,开发者通过实现其 run(String... args) 方法,可在应用…...

vxe-table 同时实现合并单元格与任意列展开行
前一段时间有一个需求,要求既要合并单元格,又要实现树状图的效果,但是展开节点tree-node 可以放在非第一列的任意位置,Vxe-table可以实现如下是效果图: 大家可以一起交流学习! ~重点注意事项:…...

ArcGIS Desktop使用入门(二)常用工具条——图形
系列文章目录 ArcGIS Desktop使用入门(一)软件初认识 ArcGIS Desktop使用入门(二)常用工具条——标准工具 ArcGIS Desktop使用入门(二)常用工具条——编辑器 ArcGIS Desktop使用入门(二&#x…...
Java SpringMVC 和 MyBatis 整合关键配置详解
目录 一、数据源配置二、MyBatis 工厂配置三、Mapper 扫描配置四、SpringMVC 配置五、整合示例实体类Mapper 接口Mapper XML 文件Service 类控制器JSP 页面六、总结在 Java Web 开发中,SpringMVC 和 MyBatis 是两个常用框架。SpringMVC 负责 Web 层的请求处理和视图渲染,MyBa…...
【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略
文章目录 🎯 观察者模式(Observer Pattern)深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码(玩家血量监控系统)1. 定义观察者接口与主题基类2. 实现具体主题(玩家血量)3. 实现…...

神经网络语言模型(前馈神经网络语言模型)
神经网络语言模型 什么是神经网络?神经网络的基本结构是什么?输入层隐藏层输出层 神经网络为什么能解决问题?通用近似定理为什么需要权重和偏置?为什么需要激活函数?权重是如何确定的?1. 穷举2. 反向传播主…...