Redis持久化机制—RDB与AOF

Redis持久化机制

RDB(默认)

**思想:**保存整个数据库的快照,也就是RDB文件,有两种保存方式,前台保存save和后台保存bgsave,前者会阻塞主进程程,后者则是fork一个子进程去完成备份操作,不会阻塞。

注意:fork子进程的过程是阻塞的,完成之后不再阻塞

**开启方式:**默认开启

设置备份频率
请添加图片描述
特点:

  • 数据恢复速度快(响应速度很重要,所以默认用RDB):使用 RDB 文件恢复数据,直接解析还原二进制数据即可,不需要一条一条地执行命令,速度非常快。
  • 备份的RDB文件AOF文件小很多,因为RDB只记录最终值,而AOF会完整记录变化过程
  • 安全性相对较低,因为全量备份时开销比较大,故无法实时备份,备份的间隔长
  • 备份期间的对性能影响比较大,因为是全量备份,且每次都需要fork一个子进程

思考问题:如果子进程读取数据写入到RDB文件的期间,数据发生了变化,如何处理?

用了copyonwrite机制,对于要写的那部分数据,先进行拷贝,然后再写,写入RDB的数据不会有变化。

AOF

思想:记录所有执行的写命令到AOF文件中,备份时只需要往原本的AOF文件追加指令即可,当重启时将AOF文件的指令全部执行一遍即可恢复

**开启方式:**修改redis.conf配置文件,把appendonly 设置为 yes

appendonly yes

持久化过程:

  • 执行修改命令
  • 更改内存中的数据结构
  • 记录到AOF缓冲区
  • 根三种同步(刷盘)策略,将缓冲区数据同步到AOF文件中(AOF过大时可以重写AOF文件进行压缩)
  • 重启,加载AOF文件,执行命令,恢复数据

在这里插入图片描述

AOF同步(刷盘)的三种策略:
在这里插入图片描述
三种策略的对比
在这里插入图片描述
特点:

  • 安全性高,能够做到实时(秒级)的备份
  • 备份轻量,只需要追加命令即可,不像RDB的全量备份那么消耗CPU 资源和内存资源
  • 恢复速度慢,因为需要一条一条执行AOF文件记录的语句
  • 备份的文件较大,可以用REWRITEAOF命令重写,但体积还是会比RDB大

思考问题:执行写命令时,是先记录执行命令还是先记录到AOF文件中?为什么?

一般的数据库(如 MySQL)通常都是执行命令之前先记录好日志,这样方便故障恢复,防止数据丢失。但是Redis是先执行命令,再记录到AOF。

优点:

  • 保证实时可见性,响应速度快,即用户执行完写操作后用户能够立即读取到更新后的数据。
  • 查减少写操作的延迟,提高吞吐量,因为在记录日志前不需要再对命令做语法检。

缺点:如果命令执行完,但没有来得及写入AOF,服务器宕机了,此时数据会丢失。不过redis的AOF的间隔比较短,只会丢失少量数据。真正的数据源一般都在mysql里面,故影响不大。

选用RDB还是AOF?

  • 正常情况使用RDB,因为他数据恢复速度快,而丢失一些数据相对影响没这么大,真正的数据还在数据库中。
  • 只有当对安全性有很高要求时,选择AOF,可以做到秒级别的备份。

在这里插入图片描述

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

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

相关文章

C++入门9——list的使用

目录 1.什么是list? 2.list的构造 3.list迭代器的使用(list iterator) 4.list capacity 5.list modifiers 6.list的其他操作 1.什么是list? 在官网中,对list有这样的介绍: Lists are sequence co…

SLM561A​​系列 60V 10mA到50mA线性恒流LED驱动芯片 为智能家居照明注入新活力

SLM561A系列选型参考: SLM561A10ae-7G SOD123 SLM561A15ae-7G SOD123 SLM561A20ae-7G SOD123 SLM561A25ae-7G SOD123 SLM561A30ae-7G SOD123 SLM561A35ae-7G SOD123 SLM561A40ae-7G SOD123 SLM561A45ae-7G SOD123 SLM561A50ae-7G SOD123 …

【软件文档】软件系统需求管理规程(项目管理word原件)

软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解…

解决Pynput不能在Ubuntu22.04上正常使用问题

pynput 是一个 Python 库,它提供了一套简单的接口来控制和监控输入设备,包括鼠标和键盘。这个库允许开发者编写跨平台的代码来处理输入事件,无需担心底层操作系统的差异。 下面是pynput的测试程序: from pynput.keyboard import …

中秋之美——html5+css+js制作中秋网页

中秋之美——html5cssjs制作中秋网页 一、前言二、功能展示三、系统实现四、其它五、源码下载 一、前言 八月十五,秋已过半,是为中秋。 “但愿人长久,千里共婵娟”,中秋时节,气温已凉未寒,天高气爽&#x…

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置: // launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.…

分布式项目中使用雪花算法提前获取对象主键ID

hello,大家好,我是灰小猿! 在做分布式项目开发进行数据表结构设计时,有时候为了提高查询性能,在进行数据库表设计时,会使用自增ID来代替UUID作为数据的主键ID,但是这样就会有一个问题&#xff…

改写二进制文件

以下是一些常见的方法和工具: 1. 使用十六进制编辑器 十六进制编辑器 是最直接的工具之一,用于查看和编辑二进制文件中的数据。它允许你以十六进制格式查看和修改文件内容。 常见十六进制编辑器: HxD(Windows)Hex F…

JavaScript 根据关键字匹配数组项

要在JavaScript数组中根据关键字匹配项,可以使用filter方法结合一个测试函数。以下是一个示例代码,定义了一个函数findByKeyword,该函数接受一个数组和一个关键字,然后返回一个新数组,其中包含与关键字匹配的所有项。 …

【LabVIEW学习篇 - 16】:文件操作

文章目录 CSV文件CSV写入CSV读取 TXT文件txt写入txt读取 INI文件INI文件写入INI文件读取 CSV文件 .csv (Comma-Separated Values)是逗号分隔值文件格式,有时也称之为字符分隔值,因为分隔符也可以不是逗号(最常见的是逗号和制表符)&#xff0…

(一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别

🍂1、不说废话,现象展示 🍃图片识别 🍃视频识别 自己训练样本 十分简易快速 opencv级联ha

springboot启动时替换配置参数

SpringBoot启动时配置参数替换 一.背景 SpringBoot项目启动的时候,在不使用配置中心等的前提下或者有公司强制使用指定的“密码箱”情况下,需要远程获取关键配置信息,比如数据库密码,则需要在项目启动前获取配置并且进行本地配置…

小皮面板webman ai项目本地启动教程

1.前置条件 下载小皮面板 下载后,双击安装,一路next(下一步),无需更改配置。 2.安装必须软件 在小皮面板的软件管理页,安装编号①②③④下面四个软件。 3.启动本地服务 进入到小皮面板的首页&#x…

Java Stream API

Java Stream API 在现代软件开发中,处理集合(如列表、集合等)中的数据是一项常见且至关重要的任务。Java 自 JDK 8 引入的 Stream API 极大地简化了这一过程,使得数据处理变得更加直观、灵活且易于理解。本文将带你深入了解 Java…

mysql学习教程,从入门到精通,MySQL 删除数据表与选择数据库(7)

1、MySQL 删除数据表 MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。 语法 以下为删除MySQL数据表的通用语法:MySQL 删除数据表 MySQL中删除数据表是非常容易操作的&#xff…

空指针异常 (NullPointerException)怎么办

在 Java 编程中,空指针异常(NullPointerException,简称 NPE)是最常见且困扰开发人员的异常之一。尽管 Java 是一种强类型语言,设计上提供了类型安全的特性,但空指针问题依然是开发过程中最常见的运行时异常…

把Django字典格式的数据库配置转成tortoise-orm的URL格式

Django版的数据库配置如下: DATABASES {"default": {"ENGINE": "django.db.backends.mysql","NAME": "test_1","USER": "root","PASSWORD": "123456","HOST&quo…

MES系统如何支持企业进行数字化转型

MES系统(Manufacturing Execution System,制造执行系统)在企业数字化转型中扮演着至关重要的角色,它通过提供实时的生产数据、优化生产流程、提升质量管理水平、实现设备智能化管理以及促进企业内部协同和沟通等多种方式&#xff…

多线程下载网络资源

示例:模拟通过5个线程下载10个网络图片 import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayL…

Hive和Hbase的区别

Hive 和 HBase 都是 Hadoop 生态系统中的重要组件,它们都能处理大规模数据,但各自有不同的适用场景和设计理念。以下是两者的主要区别: 1. 数据模型 Hive:Hive 类似于传统的关系型数据库 (RDBMS),以表格形式存储数据…