当前位置: 首页 > news >正文

Redis持久化——AOF

介绍

Redis是运行在内存中的数据库,当我们关闭了Redis服务器后,内存中的数据会丢失吗?
答案是不会的,因为Redis有持久化功能,能够将内存中的数据保存到磁盘中的文件,以此来实现数据的永久保存。
在Redis中,有两种持久化功能:

  • RDB持久化功能,简称RDB快照
  • AOF持久化功能,简称AOF日志

关于RDB快照,建议先去看看我的这篇文章Redis持久化——RDB快照_秋天code的博客-CSDN博客

AOF日志

AOF的全称是,Append Only File,日志文件追加写。
AOF日志记录的是每次对数据进行修改的命令,通过这些命令就可以恢复数据库状态
注意:读命令是不会被记录到AOF日志中的,因为不涉及数据的变化。
Redis每执行一条写命令,就会把该命令以追加的方式写入到AOF日志文件中,然后在Redis服务器启动时,就会通过此日志文件中的命令,来恢复数据库状态,大致的工作流程:

在Redis中,默认开启的是RDB持久化功能,并没有开启AOF持久化功能,因此我们修改配置项来开启AOF持久化功能:

appendonly yes // 表示开启AOF持久化(no关闭)
appendfilename "appendonly.aof" // AOF日志文件的名称

AOF日志写回时机

对AOF日志文件追加写的操作是IO操作,肯定是比内存操作要慢的,又因为Redis是单线程的,所以IO操作会阻塞后面的请求,因此为了提高Redis的性能,会在内存中有一块缓冲区,专门用来存放每次写命令产生的AOF日志,将缓冲区中的命令批量写回到AOF文件中。

先来看AOF日志写入的详细流程图:

Redis中提供了3种写回策略,控制以上的第三步,即调用操作系统的IO操作的时机。

在Redis的配置文件中,appendsync配置项就是用来配置AOF的回写策略,有三个值AlwaysEverysecNo

  • Always,每次执行写操作命令完成后,同步将AOF日志写回磁盘
  • Everysec每秒,每次执行写操作命令,会先记录此命令到内存中的AOF缓冲区,隔1秒后,将缓冲区中的AOF日志写回到AOF文件中。
  • No,不由Redis控制写回硬盘的时机,转交给操作系统控制。也就是说,每次写操作命令执行完后,先将命令写入到内存中的AOF缓冲区,再由操作系统来决定何时将此缓冲区中的内存写回到磁盘文件中。

总结这三种策略:

AOF重写机制

AOF日志文件,随着执行写操作的命令次数越来越多,文件的大小会越来越大。
当一个AOF日志文件过大时,就会严重影响性能:当Redis服务器启动时,需要从AOF日志文件中恢复数据,Redis是单线程的,会逐条执行其中的命令,当AOF文件过大时,命令也会很多,整个数据恢复过程就会很慢。

Redis为了避免AOF日志文件过大的问题,提供了AOF重写机制,当AOF文件的大小超过设定的阈值时,Redis就会启动AOF重写机制,来压缩AOF文件
具体的原理是:
AOF重写机制是在重写时,读取当前数据库中的所有键值对,然后将每一个键值对用一条命令记录到新的AOF文件中,等到全部记录完成后,就会将新的AOF文件替换掉旧的AOF文件,AOF文件的体积会大大缩小。(因为一条记录、键值对,可能会对应多次写操作,我们只需要记录最终此键值对的状态即可,因此就会把原来旧的AOF文件中的对同一键值对写的命令,最终替换成一条写命令,所以AOF文件体积会缩小)

AOF和RDB对比

  • AOF日志文件是文本文件,记录的是所有的写命令;而RDB文件是二进制文件,记录的就是数据本身。
  • AOF日志恢复数据的速度较慢,即在服务器启动时占用的时间较长。RDB文件的载入会较快。(因为AOF持久化功能会把AOF日志中的每条命令再执行一遍,当AOF日志非常大时,需要执行的命令就非常多,而且Redis是单线程的,需要一条一条的执行,所以恢复数据的效率较低)

参考文章

  • 《Redis设计与实现》
  • AOF 持久化是怎么实现的? | 小林coding

相关文章:

Redis持久化——AOF

介绍 Redis是运行在内存中的数据库,当我们关闭了Redis服务器后,内存中的数据会丢失吗? 答案是不会的,因为Redis有持久化功能,能够将内存中的数据保存到磁盘中的文件,以此来实现数据的永久保存。 在Redis中…...

Qt 嵌入Vue项目 flapMap 浏览器兼容性问题

最近有个需求,Qt工程需要嵌入vue项目,本来是很简单的事情。在我的PC上启动Vue项目,同事PC上用浏览器通过IP地址可以正常加载vue项目,但用Qt嵌入总是失败。问题定位步骤如下: 1)换了一个简单的vue项目&…...

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页

1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致,使用注解解决 1.2 提交的域名和处理方法的参数不一致,使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url:http://localhost:8080/s…...

C++ Primer Plus: 第10章(2)

第10章编程题&#xff1a; &#xff08;1&#xff09; Account.h: #ifndef ACCOUNT_H_ #define ACCOUNT_H_#include <string>class Account { private:std::string name ;std::string code ;double money ; public:Account() ;Account(std::string Name, std::string Co…...

c++中的extern关键字

extern关键字主要修饰变量或函数&#xff0c;表示该函数可以跨文件访问&#xff0c;或者表明该变量在其他文件定义&#xff0c;在此处引用。 extern修饰变量 &#xff08;1&#xff09;如果某变量int m在a.c中定义声明&#xff0c;则其他b.c文件访问时&#xff0c;需要用exte…...

javaScript:快乐学习计时器

目录 一.前言 二.计时器 1.计时器的分类 2. 创建计时器的方式 创建间隔计时器 创建方式三种 1.匿名函数 2.使用函数直接作为计时器的执行函数 2.使用函数直接作为计时器的执行函数,用字符串的形式写入 3.计时器的返回值 4.清除计时器 5.延迟计时器 相关代码 一.前言 在…...

onnxruntime 支持的所有后端

1 代码导出 import onnxruntime as ort aaa ort.get_all_providers() print(aaa)1. 1 下面是ort支持的所有后端 TensorrtExecutionProvider, CUDAExecutionProvider, MIGraphXExecutionProvider, ROCMExecutionProvider, OpenVINOExecutionProvider, DnnlExecutionProvider…...

k8s 自身原理 5

我们知道容器是通过 pod 来承载的&#xff0c;我们在 k8s 中&#xff0c;服务都是跑在 pod 里面的&#xff0c;pod 里面可以跑 1 个容器&#xff0c;或者跑多个容器&#xff0c;那么咱们 pod 里面跑 1 个服务容器&#xff0c;咱真的就以为里面就只有这样个容器吗&#xff1f; …...

机器视觉应用开发什么最重要?

&#xff08;QQ群有答疑&#xff09;零基础小白快速上手海康VisionMaster开发系列课程 高级语言在机器视觉就是工具&#xff0c;机器视觉软件&#xff0c;在机器视觉中也是工具&#xff0c;在机器视觉应用开发中&#xff0c;图像处理是最重要的&#xff0c;一切看图像&#xff…...

React+Typescript使用接口泛型处理props

好 刚讲完组件 那么 这次 我们来看一下 数据传递的 props 还是上文的案例 例如 我们想将 title 传给Hello组件 之前我们可以直接这样 以一个标签属性的形式传过去 而我们在子组件中 这样去使用 但现在 我们从编辑器中都可以看出 这种写法已经不行了 然后 我们将 hello 组件…...

自定义python文件import导入ModuleNotFoundError: No module named ‘***‘ 问题

自定义python文件import导入ModuleNotFoundError: No module named ‘***’ 问题 错误代码&#xff1a; import configparser import os.path import sys from bin import swk_mysql_create, swk_redis_create这里导入自定义python文件&#xff0c;其中swk_mysql_create.py文…...

Codeforces Round 893 (Div. 2)B题题解

文章目录 [The Walkway](https://codeforces.com/contest/1858/problem/B)问题建模问题分析1.分析所求2.如何快速计算每个商贩被去除后的饼干数量代码 The Walkway 问题建模 给定n个椅子&#xff0c;其中有m个位置存在商贩&#xff0c;在商贩处必须购买饼干吃&#xff0c;每隔…...

HTTP响应状态码大全:从100到511,全面解析HTTP请求的各种情况

文章目录 前言一、认识响应状态码1. 什么是HTTP响应状态码2. Http响应状态码的作用3. 优化和调试HTTP请求的建议 二、1xx 信息响应1. 认识http信息响应2. 常见的信息响应状态码 三、2xx 成功响应1. 认识HTTP成功响应2. 常见的成功响应状态码 四、3xx 重定向1. 认识http重定向2.…...

Vue-10.集成.env

.env、.env.development 和 .env.preview .env、.env.development 和 .env.preview 文件是用于配置环境变量和应用程序设置的文件&#xff0c;它们在项目开发和部署过程中起到关键作用。这些文件用于在不同的环境中设置不同的变量值&#xff0c;以满足不同环境下的配置需求。 …...

强训第33天

选择 C A ping是TCP/IP协议族的一部分&#xff0c;使用ICMP协议&#xff0c;ICMP底层使用IP协议。如果要ping其他网段&#xff0c;则需要设置网关。 如果是二层交换机故障&#xff0c;则ping同网段的也会不通。 C Dos攻击被称之为“拒绝服务攻击”&#xff0c;其目的是使计算机…...

【CTF-web】buuctf-[极客大挑战 2019]EasySQL 1(sql注入)

题目链接 根据题目判断出可能需要sql注入&#xff0c;看源码可知数据是通过GET的方式传输的&#xff0c;即放在url的username和password两个参数中。 只要将username输入为1 or 11#&#xff0c;password可以为任何值&#xff0c;即可顺利登录。 需要注意的是url中的井号表示…...

脚本语言与编译语言的区别

文章目录 一、语法差异二、执行方式差异三、应用领域差异四、总结 一、语法差异 脚本语言&#xff1a;脚本语言通常使用解释器逐行执行&#xff0c;不需要事先编译。它的语法相对简单&#xff0c;易于学习和使用。常见的脚本语言有Python、JavaScript和Ruby等。 编译语言&…...

大型企业或者组织,组建专属的虚拟局域网,深入理解相关的配置和搭建使用、网络加速和网络优化,可夸地区夸国际使用,深入搞懂每项配置的作用和含义

大型企业或者组织,组建专属的虚拟局域网,深入理解相关的配置和搭建使用、网络加速和网络优化,可夸地区夸国际使用,深入搞懂每项配置的作用和含义。 1、openxxx介绍与图解 1.1 openxxx介绍 openxxx 是一个基于 OpenSSL库的应用层 虚拟局域网 实现。和传统 虚拟局域网 相…...

数据结构:二叉树的递归实现(C实现)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》 文章目录 前言一、树的概念二、二叉树二叉树的概念二叉树的性质 三、二叉树链式结构实现二叉树节点定义创建二叉树节点遍历二叉树先序遍历二叉树(BinaryTreePrevOrder)中序遍历二叉树(BinaryTree…...

MinGW编译运行报错RTTI symbol not found for class ‘XXX‘

最近在调试程序时莫名的出现图中报错&#xff1a; 还遇到过for class QObject&#xff0c;在此记录一下&#xff0c;排查后发现&#xff0c;原因都是有资源被重复释放导致的。...

TuxGuitar:吉他爱好者的开源乐谱编辑与播放解决方案

TuxGuitar&#xff1a;吉他爱好者的开源乐谱编辑与播放解决方案 【免费下载链接】tuxguitar Open source guitar tablature editor 项目地址: https://gitcode.com/gh_mirrors/tu/tuxguitar 你是否曾经因为找不到合适的吉他谱编辑软件而烦恼&#xff1f;或者想要创作自己…...

6G网络中的流体天线与速率分割多址技术解析

1. 6G网络中的流体天线与速率分割多址技术解析 在移动通信技术快速迭代的今天&#xff0c;6G网络正逐渐从概念走向现实。作为下一代通信系统的核心候选技术&#xff0c;流体天线系统(FAS)与速率分割多址(RSMA)的结合展现出独特的优势。FAS通过动态调整天线位置提供灵活的空间自…...

MoneyPrinter实时预览功能:视频生成过程可视化实现终极指南

MoneyPrinter实时预览功能&#xff1a;视频生成过程可视化实现终极指南 【免费下载链接】MoneyPrinter Automate Creation of YouTube Shorts using MoviePy. 项目地址: https://gitcode.com/gh_mirrors/mo/MoneyPrinter MoneyPrinter是一款基于MoviePy的自动化YouTube …...

Trigger.dev任务重试退避策略:指数退避配置完整指南 [特殊字符]

Trigger.dev任务重试退避策略&#xff1a;指数退避配置完整指南 &#x1f680; 【免费下载链接】trigger.dev Trigger.dev – build and deploy fully‑managed AI agents and workflows 项目地址: https://gitcode.com/gh_mirrors/tr/trigger.dev 构建可靠的后台任务和…...

ARM GICv3虚拟化中断机制与优化实践

1. GICv3虚拟化中断处理机制概述在ARM虚拟化架构中&#xff0c;通用中断控制器(GIC)扮演着关键角色。GICv3作为第三代架构&#xff0c;引入了全面的虚拟化支持&#xff0c;使得虚拟机能够高效处理中断而无需Hypervisor的频繁介入。其核心设计理念是通过虚拟CPU接口(vCPU Interf…...

量子计算模拟色团阵列振动电子动力学

1. 量子模拟色团阵列振动电子动力学的核心挑战在光合作用等生物过程中&#xff0c;色团阵列&#xff08;chromophore arrays&#xff09;的能量转移机制一直是科学家们关注的焦点。传统计算机在模拟这类量子多体系统时面临指数级增长的资源需求&#xff0c;而量子计算为解决这一…...

Lumberjack 暗色主题:提升开发效率的配色方案与多平台配置指南

1. 项目概述&#xff1a;一个为开发者打造的暗色系主题 如果你和我一样&#xff0c;每天有超过一半的时间都泡在代码编辑器里&#xff0c;那么一个顺眼的主题就不仅仅是“好看”而已&#xff0c;它直接关系到你的工作效率和眼睛的舒适度。今天要聊的这个项目&#xff0c; Drru…...

英伟达汽车计算平台:从芯片到生态的自动驾驶全栈解决方案

1. 从GTC 2021看英伟达的汽车野心&#xff1a;不止于芯片的生态战争上周的GTC 2021大会信息量爆炸&#xff0c;光是汽车相关的发布就足以让整个行业消化好一阵子。作为一名长期跟踪汽车电子与自动驾驶技术演进的老兵&#xff0c;我习惯在每次大型技术发布会后&#xff0c;把那些…...

国产多模态大模型“刘知远”:技术原理、实战应用与未来展望

国产多模态大模型“刘知远”&#xff1a;技术原理、实战应用与未来展望 引言 在人工智能浪潮中&#xff0c;多模态大模型正成为推动AGI&#xff08;通用人工智能&#xff09;发展的关键引擎。当全球目光聚焦于GPT-4、DALL-E等明星模型时&#xff0c;国产力量也在悄然崛起。其中…...

MFC深入-MFC和win32

MFC和Win32 MFC Object和Windows Object的关系 MFC中最重要的封装是对Win32 API的封装&#xff0c;因此&#xff0c;理解Windows Object和MFC Object (C对象&#xff0c;一个C类的实例)之间的关系是理解MFC的关键之一。所谓Windows Object&#xff08;Windows对象&#xff09;是…...