Redis的持久化策略:RDB与AOF(面试题详解)

news2024/11/18 7:27:16

在这里插入图片描述

文章来源:Redis持久化的两种方式:RDB与AOF(详解),订正了一些错误

一、概述:

RDB和AOF持久化的由来?

因为Redis中的数据是基于内存的,所以如果出现服务器断电或者服务器宕机,那么Redis中存放的数据就会直接丢失。RDB和AOF就是针对Redis提供的两种持久化机制,可以将Redis中的数据持久化到磁盘中。当Redis实例故障重启后,就可以根据备份的文件来进行数据的恢复

二、RDB

概述:

RDB全称Redis Database Backup file,也被叫做Redis数据快照,简单来说就是把内存中所有的数据都记录在磁盘中,当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前的运行目录(RDB可以理解为U盘拷贝,将Redis中的数据直接进行复制操作
每次触发RDB的时候,就会重新生成一个新的RDB文件,覆盖旧的RDB文件文件,这样就可以确保备份得到最新的数据。

RDB的触发策略:

① 关闭Redis实例的时候,redis会在关闭之前主动的进行一次RDB(关闭不是宕机,宕机则数据丢失)
② 当你使用save/bgsave命令的时候,redis也会进行内存数据的持久化
③ 通过配置文件的配置触发:redis.conf配置文件

save 900 1
– 表示在900秒内,redis中有1个key发生改变,那么就进行一次bgsave
save 300 10
– 表示在300秒内,redis中有10个key发生改变,那么就进行一次bgsave
save 60 10000
– 表示在60秒内,redis中有10000个key发生改变,那么就进行一次bgsave

save/bgsave的不同

前面说到可以使用save命令或者bgsave命令来触发RDB,那么两者有什么区别呢?

  • 如果使用的是save命令,数据备份就是由主线程来操作的,由于Redis是单线程的,所以如果使用save命令来进行内存的数据备份,那么在数据备份的时候redis是无法响应用户的请求的。当需要备份的数据非常大的时候,就可能导致请求被阻塞超时的情况
    如果使用的是bgsave命令,那么实际上是主线程fork个子线程,让子线程来进行RDB操作,主线程只是在fork子线程的时候阻塞,之后便可以继续响应用户的请求。接下来子进程即可读取内存数据并进行持久化,生成新的RDB文件替换旧的RDB文件
RDB缺点:
  • RDB执行间隔时间长,两次RDB之间写入数据有丢失风险
  • fork子进程、压缩、写出RDB文件都比较耗时
RDB优点:
  • 使用RDB文件进行数据的恢复速度快、效率高(类似于文件拷贝)
  • 相比于AOF持久化的文件,RDB的文件更小
RDB的相关配置:
  • 在redis.conf配置RDB文件压缩
# 表示的是是否开启压缩,不建议开启,虽然节省空间,但是会耗费CPU
rdbcompression yes
  • 在redis.conf配置RDB文件名
# 默认的rdb文件名称
dbfilename dump.rdb
  • 在redis.conf配置rdb文件存放路径
dir ./
  • 在redis.conf配置触发策略
# 15分钟内有1个key发生改变,那么就保存
save 900 1
# 5分钟内有10个key发生改变,那么就保存
save 300 10
# 1分钟内有10000个key发生改变,那么就保存
save 60 10000
# 执行的都是bgsave

三、AOF

概述:

AOF的全称叫做Append Only File(追加文件)Redis处理的每一个命令都会记录在AOF文件中,可以看做是命令日志文件(AOF存放的不是数据本身而是执行redis写操作的命令,类似于存放insert/update等这类命令而不是数据

触发策略:根据配置文件触发redis.conf
  • 每执行一次命令,立即记录到AOF文件(性能最差,是有主进程执行)
appendfsync always
  • 写命令执行完先放入AOF缓存区,然后每间隔1s将缓冲区中的数据写到AOF文件,默认设置(性能较好,但是可能丢失1s内的数据)
appendfsync everysec
  • 写命令执行完先放入AOF缓冲区中,由操作系统决定合适写回磁盘(可靠性比较低,性能最好)
appendfync no
配置项刷盘时机优点缺点
Always同步刷盘可靠性高,几乎不丢数据性能影响大
everysec每秒刷盘性能适中最多丢失1s数据
no操作系统控制性能最好可靠性较差,可能丢失大量数据
AOF的重写机制:

由于AOF记录的是命令,那么当执行了很多命令的时候,就会记录到很多的冗余命令,例如:

# 添加key1的值
set key1 v1
# 修改key1的值
set key1 v2
# 删除key1的值
del key1

实际上key1最后被删除了,那么所有关于key1的命令实际上都是没有作用的,但是AOF中却记录了所有的命令,这样就会导致AOF文件很大而且存放了很多冗余命令。
通过使用bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同的效果,执行完该指令后,所有的冗余指令就会被删除,达到AOF文件压缩的效果。

AOF优点:
  • 通过配置,可以使得备份的数据更加完整安全
  • 每次进行AOF时占用的CPU资源较少(因为是追加,RDB则是全部重新复制一遍)
AOF缺点:
  • 通过使用AOF文件进行恢复的速度较慢,需要依次执行所有指令
  • AOF文件可能会比RDB大得多,记录的是所有的写操作
AOF配置:
  • 在redis.conf配置AOF开启
# 表示的是开启,默认是no
appendonly yes
  • 在redis.conf配置AOF文件名
# 这里表示的是AOF文件名称
appendfilename "appendonly.aof"
  • 在redis.conf配置重写触发策略
# AOF文件比上次文件增长超过百分之百则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才能触发重写
auto-aof-rewrite-min-size 64mb

四、RDB和AOF的对比

RDBAOF
持久化方式定时对整个内存做快照记录每一次执行的命令
数据完整性不完整,两次备份之间会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件体积较小记录命令,文件体积很大
宕机恢复速度很快
数据恢复优先级低,因为数据完整性不如AOF高,因为数据完整性更高
系统资源占用高,大量CPU和内存消耗低,主要是磁盘IO资源,但AOF重写时会占用大量CPU和内存资源
使用场景可以容忍数分钟的数据丢失,追求更快的启动速度对数据安全要求较高常见

五、知识点:

  • 默认方式开启的是RDB,AOF默认是关闭的

六、实际使用

在实际使用中,一般不会单独的开启其中的一个,一般都会使用两者结合的方式一并使用。RDB根据有容灾性,可以周期性的进行RDB得到指定时间点的备份文件。AOF则数据更加的完整,仅仅有非常少的数据的丢失。

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

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

相关文章

Spring Boot集成SpringFox 3.0与Pageable参数处理

Springfox 3.0有多个模块&#xff0c;提供了spring boot starter&#xff0c;与Spring Boot集成时仅需引入springfox-boot-starter&#xff0c;如下&#xff1a; <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter<…

FL Studio 21 for Mac中文破解版百度网盘免费下载安装激活

FL Studio 21 for Mac中文破解版是Mac系统中的一款水果音乐编辑软件&#xff0c;提供多种插件&#xff0c;包括采样器、合成器和效果器&#xff0c;可编辑不同风格的音乐作品&#xff0c;Pattern/Song双模式&#xff0c;可兼容第三方插件和音效包&#xff0c;为您的创意插上翅膀…

ElementType枚举类

作用 可用于注解Target指定作用位置&#xff0c;例如&#xff1a;在注释类上声明作用于注解 种类 TYPE类、接口&#xff08;包括注释类型&#xff09;或枚举声明FIELD字段声明&#xff08;包括枚举常量METHOD方法声明PARAMETER形式化参数说明CONSTRUCTOR构造函数说明LOCAL_VAR…

人工智能站队将再添一名大将,苹果明年或将推出AppleGPT

KlipC报道&#xff1a;据外媒报道&#xff0c;苹果公司计划每年投资 10 亿美元&#xff0c;将生成式人工智能&#xff08;AI&#xff09;整合到其产品线中。据知情人士透露苹果计划最早在2024年底开始在iPhone和iPad上融入生成式人工智能技术。 KlipC的合伙人Andi D表示&#x…

第四章 文件管理 二、文件的逻辑结构

目录 一、概括 二、无结构文件 1、定义&#xff1a; 三、有结构文件 1、定义&#xff1a; 2、逻辑结构 &#xff08;1&#xff09;顺序文件: 按存储结构分类&#xff1a; 按关键字分类&#xff1a; 总结&#xff1a; 3、索引结构 4、索引顺序结构 &#xff08;1&am…

CentOS7.9+Kubernetes1.28.3+Docker24.0.6高可用集群二进制部署

CentOS7.9Kubernetes1.28.3Docker24.0.6高可用集群二进制部署 查看版本关系 ## 从kubernetes-server-linux-amd64.tar.gz解压后有kubeadm ]# ./kubeadm config images list W1022 20:06:05.647976 29233 version.go:104] could not fetch a Kubernetes version from the in…

Unity3D 基础——鼠标悬停更改物体颜色,移走恢复

方法介绍 【unity学习笔记】OnMouseEnter、OnMouseOver、OnMouseExit_unity onmouseover_一白梦人的博客-CSDN博客https://blog.csdn.net/a1208498468/article/details/117856445 GetComponent()详解_getcomponet<> 动态名称-CSDN博客https://blog.csdn.net/kaixindrag…

飞管飞控系统仿真应用探究与浅析

数字孪生技术是对真实物理实体的虚拟映射与数字化信息的应用再造&#xff0c;因其在产品生产制造与技术运用过程中&#xff0c;可将物理世界和数字世界进行实时交汇与良好互动的特性越来越受到普遍关注与广泛应用。据统计&#xff0c;2021年全球数字孪生市场规模为约500亿元&am…

【C++技能树】Lambda表达式

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 文章目录 0. Lambda表达式简介1. Lambda表达式2. Lambda表达式语法 0. Lambda表达式简介 在C98及之前,想要对sort进行自定义排序,或者对自定义类…

手把手教你如何重装win10系统,自己动手安装系统其实很简单

笔者在这里写一个详细点的系统重装教程。手把手教大家如何从零开始重装win10系统。因为是写给新手来看的&#xff0c;会尽力介绍的详细一些。 文章较长&#xff0c;大家不用被吓到。简化一下具体步骤只有几步。顺利话一个小时内就可以安装好。我列了个目录&#xff1a; 一、重…

LVS负载均衡及LVS-NAT模式

一、集群概述 1.1 集群的背景 集群定义&#xff1a;为解决某个特定问题将多个计算机组合起来形成一个单系统 集群目的&#xff1a;为了解决系统的性能瓶颈 集群发展历史&#xff1a; 垂直扩展&#xff1a;向上扩展&#xff0c;增加单个机器的性能&#xff0c;即升级硬件 水…

【CNN-LSTM预测】基于卷积神经网络-长短期记忆网络的数据分类预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ONEPIECE!程序环境和预处理——C语言最终章

时间过得飞快呀&#xff0c;从第一篇blog到现在&#xff0c;已经有三四个月的时间了&#xff0c;而我们终于也迎来了C语言的最终章——程序环境和预处理&#xff01;加油吧朋友们&#xff0c;ONEPIECE就在眼前~ 目录 一、程序的"翻译环境"和"运行环境" 二…

使用gen 结合gorm 生成表模型文件

# 创建一个目录 用于执行 自动生成model 的代码 和存储 生成的model文件 mkdir gengormmodel && cd gengormmodel go mod init gengormmodel go get -u gorm.io/genv0.3.16 #最终的目录结构package mainimport ("fmt""gorm.io/driver/mysql""…

【进程概念③】:进程环境变量/进程切换

深入篇【Linux】学习必备&#xff1a;进程环境变量/进程切换 Ⅰ.环境变量Ⅱ.深层意义Ⅲ.全局属性Ⅳ.进程切换 Ⅰ.环境变量 1.环境变量是什么&#xff1f;&#xff1a;环境变量是系统提供的一组name/value形式的变量&#xff0c;不同的环境变量有不同的用户。 一般是用来指定操作…

AIGC笔记--基于DDPM实现图片生成

目录 1--扩散模型 2--训练过程 3--损失函数 4--生成过程 5--参考 1--扩散模型 完整代码&#xff1a;ljf69/DDPM 扩散模型包含两个过程&#xff0c;前向扩散过程和反向生成过程。 前向扩散过程对一张图像逐渐添加高斯噪声&#xff0c;直至图像变为随机噪声。 反向生成过程…

--initialize specified but the data directory has files in it. Aborting. 问题解决

当电脑输入这条命令以试图初始化数据库的时候&#xff0c;出现这样的错误。 2023-10-23T09:04:21.258180Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more deta…

Spark SQL概述与基本操作

目录 一、Spark SQL概述 &#xff08;1&#xff09;概念 &#xff08;2&#xff09;特点 &#xff08;3&#xff09;Spark SQL与Hive异同 &#xff08;4&#xff09;Spark的数据抽象 二、Spark Session对象执行环境构建 (1)Spark Session对象 &#xff08;2&#xff09;代码演…

Python-字符串(切片操作与内建函数)

目录 一、字符串介绍 1、什么是字符串 2、转义字符 二、字符串的输入和输出 1、字符串输出 2、字符串输入 三、访问字符串中的值 1、字符串的存储方式 2、使用切片截取字符串 四、字符串内建函数 1、find 2、index 3、count 4、replace 5、split 6、capitalize …

Centos 7 Zabbix配置安装

前言 Zabbix是一款开源的网络监控和管理软件&#xff0c;具有高度的可扩展性和灵活性。它可以监控各种网络设备、服务器、虚拟机以及应用程序等&#xff0c;收集并分析性能指标&#xff0c;并发送警报和报告。Zabbix具有以下特点&#xff1a; 1. 支持多种监控方式&#xff1a;可…