Redis 持久化之 RDB AOF

news2024/11/27 22:32:10
1、简介

        Redis 是一个基于内存的 key-value 类型的 Nosql 数据库,经常用来做缓存操作,但是一旦Redis 宕机,重启之后数据会丢失,因此,需要将内存数据进行持久化,保证服务重启后数据能够恢复之前的状态。Redis 持久化有两种方式:RDB 和 AOF。

2、RDB 持久化

        rdb 持久化是内存中的数据集快照写入磁盘,在恢复时再将硬盘中的文件直接读回内存,备份时是全量备份,保存在dump.rdb文件中。

2.1、配置 RDB 持久化
# 1、Redis 7重新指定自动触发 rdb 备份文件的标准
save 3600 1 300 100 60 10000  # 也可以自定义
# 2、指定生成rdb文件的名称
dbfilename dump.rdb
# 3、指定rdb文件的保存路径
dir ./testdata
# 4、备份出错停止接受新的请求
stop-writes-on-bgsave-error yes   # 默认开启
# 5、开启压缩rdb功能
rdbcompression yes  # 会消耗cpu资源,看情况开启,默认开启
# 6、数据校验
rdbchecksum yes  # 默认开启
2.2、触发 RDB 文件备份的情况

1)、配置文件中满足默认备份配置条件;

2)、在客户端手动执行 save/bgsave,save会阻塞当前Redis服务,不推荐使用,bgsave会fork出子线程执行 RDB 持久化,不会阻塞,推荐使用;

3)、执行flushall/flushdb也会触发 RDB 持久化,只不过生成的是空文件,将备份后的 RDB 文件移动到另外一个位置在执行 flush 操作,否则备份无意义;

4)、执行shutdown且没有开启 AOF 持久化也会触发 RDB 持久化;

5)、主从复制时,主节点自动触发。

2.3、通过 RDB 文件恢复数据

        将备份生成的 RDB 文件放到 Redis 的设置的数据保存目录下,启动 Redis 服务就可以恢复数据。(要和设置的 dir 参数和 dbfilename 参数保持一致 )。

2.4、查看最后一次备份时间

        通过以下命令查询:

# 1、从Redis中获取最后一次备份的时间戳
lastsave
# 2、在linux系统上将时间戳转化成时间
date -d @时间戳
3、AOF持久化

        AOF持久化是以日志的形式来记录每个写操作(读操作不记录),只追加不改写文件,Redis重启读取该文件将其中的命令一行一行执行,默认情况下Redis 是没有开启 AOF 的功能。

3.1、AOF 持久化配置
# 1、开启 aof 备份
appendonly yes  # 默认为 no
# 2、指定aof文件名
appendfilename "appendonly.aof"
# 3、指定aof保存路径,此路径是拼接 dir 的路径(与redis6有差别)
appenddirname "appendonlydir"
# 4、将aof文件刷新到磁盘的频率
# appendfsync always   # 有写操作就刷新
appendfsync everysec   # 每秒刷新一次
# appendfsync no       # 不刷新,由操作系统决定
# 5、redis7 将aof文件分成3个部分
appendonly.aof.1.base.rdb   # 基本文件
appendonly.aof.1.incr.aof   # 增加写操作记录文件
appendonly.aof.manifest     # 清单文件
# 6、aof文件重写
auto-aof-rewrite-percentage 100 # 根据上次重写后的aof大小,判断当前aof大小是不是增长了1倍
auto-aof-rewrite-min-size 64mb  # 重写时满足的文件大小为64mb
3.2、触发 AOF 重写的情况

1)、满足配置文件中重写要求;

2)、手动在客户端执行 bgrewriteaof 命令。

4、RDB 和 AOF 文件错误修复

        使用 redis-check-aof/rdb --fix  *.aof/*.rdb 命令进行修复。

5、混合持久化

        由于使用RDB 持久化的方式效率高,但是会丢失数据,aof 相对来说效率低一些,至于使用哪种持久化的方式,官网推荐使用混合持久化的方式。RDB镜像做全量持久化,AOF做增量持久化。

5.1、如果两种持久化方式都开启,未开启混合持久化数据文件加载顺序

        会优先加载 AOF 文件。

5.2、开启混合持久化的配置
# 1、开启混合持久化必须开启 AOF 持久化
appendonly yes
# 2、开启混合持久化
aof-use-rdb-preamble yes
 5.3、混合持久化文件格式

        混合持久化先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。AOF包括了RDB头部+AOF混写。格式如下图所示。

6、Redis 禁用持久化
# 1、禁用rdb配置
save ""
# 2、禁用 aof 配置
appendonly no

注:在禁用持久化的配置下,我们还可以通过 save/bgsave 来生成rdb文件,还可以通过 bgrewriteaof 生成 aof 文件。

7、总结

        本文详细介绍Redis7持久化机制,帮助大家更加了解Redis是如何进行数据存储到磁盘的,加深对Redis的掌握和理解。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享) 

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

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

相关文章

淘金城镇新人赚钱攻略(定制开发·源码定制智创开发)

​ 在淘金城镇中,玩家可以通过完成任务、升级角色、参与活动等方式获得丰厚的奖励和经验值,这不仅可以提升角色的能力, 还可以让玩家在游戏中获得更多的乐趣。最重要的是,淘金城镇的玩法非常精致,玩家可以通过游戏中…

C++——vector的使用及其模拟实现

vector的使用及其模拟实现 文章目录 vector的使用及其模拟实现1. vector的使用1.1 构造函数construct1.2 获取当前存储的数据个数size()和最大容量capacity()1.3 访问1.3.1 operator[]运算符重载1.3.2 迭代器访问1.3.3 范围for 1.4 容量相关reserve()和resize()1.5 增&#xff…

软件测试的工作描述

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

【算法练习Day50】下一个更大元素II接雨水

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 下一个更大元素II接雨水单调…

ESP32-CAM带摄像头的开发板使用-环境安装

首先是需要在开发板上搭建环境,其实就是将安装包给下载到开发板上,然后程序能在开发板上运行并控制开发板,这一下载过程也称为烧录。 首先我这里使用ESP32-CAM纯粹是因为便宜,所以买啦 哈哈哈 我买的是30多带摄像头的&#xff0c…

SpringMVC传递数据给前台

SpringMVC有三种方式将数据提供给前台 第一种 使用Request域 第二种 使用Model(数据默认是存放在Request域中) 与第一种方式其实是一致的 第三种 使用Map集合(数据默认是存放在Request域中)

虹科分享 | 汽车技术的未来:Netropy如何测试和确保汽车以太网的性能

文章速览: 什么是汽车以太网?汽车以太网的用途是什么?汽车以太网的测试要求是什么?流量生成如何帮助测试汽车以太网? 如今汽车不再是单纯的代步工具,把人从A点带到B点,同时还配备了车载信息娱乐…

深入数仓离线数据同步:问题分析与优化措施

一、前言 在数据仓库领域,离线数仓和实时数仓是常见的两种架构类型。离线数仓一般通过定时任务在特定时间点(通常是凌晨)将业务数据同步到数据仓库中。这种方式适用于对数据实时性要求不高,更侧重于历史数据分析和报告生成的场景…

大语言模型无代码构建知识图谱概述

2023年3月15日,ChatGPT4.0的横空出世,将人们对大语言模型的关注推到了风口浪尖。由于其在智能问答、翻译以及文本生成等工作任务上的卓越表现,业界一度出现了不再需要发展知识图谱相关技术的观点,知识图谱相关概念严重受挫。无可置…

web学习笔记(十六)

目录 HTML5新增标记汇总 1.新增语义化标签 2.新增音频和视频标签 2.1音频标签 audio 2.1视频标签 video 3.新增图像标签 4.新增表单元素和表单控件 5.新增应用程序标签(使用率较低) HTML5新增标记汇总 1.新增语义化标签 新增语义化标签能够便于…

HCIA-H12-811题目解析(12)

1、如图所示, 关于OSPF的拓扑和配置,下列说法中正确的是? 2、如图所示,私有网络中有一台web服务器需要向公网用户提供HTTP服务,因此网络管理员需要在网关路由器RTA上配置NAT以实现需求,则下面配置中能满足…

【OpenCV】OpenCV:计算机视觉的强大工具库

摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。 计算机视觉的强大工具库 一、什么是OpenCV?二、OpenCV的功…

qt学习:QT对话框+颜色+文件+字体+输入

目录 概述 继承图 QColorDialog 颜色对话框 QFileDialog 文件对话框 保存文件对话框 QFontDialog 字体对话框 QInputDialog 输入对话框 概述 对于对话框的功能,在GUI图形界面开发过程,使用是非常多,那么Qt也提供了丰富的对话框类QDia…

C++数的输入和输出 2023年12月c++一级 电子学会中小学生软件编程C++等级考试一级真题答案解析

目录 C数的输入和输出 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C数的输入和输出 2023年12月 C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个整数和双精度浮点数,先将浮…

负载均衡流程

1、负载均衡流程图 2、触发负载均衡函数trigger_load_balance void trigger_load_balance(struct rq *rq) { /* Dont need to rebalance while attached to NULL domain */ if (unlikely(on_null_domain(rq)))//当前调度队列中的调度域是空的则返回 return; i…

Python + Selenium —— 网页元素定位之标签名和链接文本定位

tag name tag name 为标签名定位,使用网页元素的标签名如a, div, input, span 等。 但是有一个问题,常见的标签名比如 在同一个页面上有非常多。会不会觉得 tag name 没什么用呢? 当然普通的模拟操作是不大有用,这个重复性实在…

深入剖析MyBatis缓存机制

第1章:引言 大家好,我是小黑。今天我们要聊的是MyBatis的缓存机制。作为Java开发中经常使用的持久层框架,MyBatis以其灵活性和简便性而广受欢迎。但你知道吗,很多时候,正是因为这些特点,我们需要更深入地理…

Swift抓取某网站律师内容并做排名筛选

有个很要好的朋友,今天找我说他的朋友欠他钱,因为工程上面的事情,所以一直没拿到款。想让我找个靠谱的律师帮他打官司,因为这个也不是我的强项,也没有这方面的经验。随即从律师网站爬取对应律师口碑以及成功案例&#…

pytorch 44 不修改源码在yolov8中使用odconv动态卷积

这里仅修改对YOLOv8的使用方式,不修改任何源码即可将odconv使用到最新的yolov8n模型上,实现了对私有数据集下的巨大性能提升(尤其是对于类别不平衡的少样本数据)。ODCONV是Intel提出的一种极差即用的动态卷积,在小模型上涨点效果较为明显(在大模型上涨点效果略微退化),…

logstack 日志技术栈-04-opensource 开源工具 OpenObserve+Grafana Loki

日志技术栈 日志管理包含日志数据存储、处理、分析和可视化,通过利用日志管理工具,可以监控性能趋势、解决问题、检测异常并优化整体系统性能。 近年来,开源日志管理解决方案在大家寻求灵活且经济有效的方式来管理现代系统典型的大量日志数…