redis数据安全(三)数据持久化 AOF

news2024/11/28 2:28:31

接上一篇RDB,本篇看下Redis数据持久化的第二种方式AOF。

目录

一、AOF原理

1、写入机制:

2、缓冲机制:

3、重写机制 :

4、运行流程

二、AOF文件配置

1、开启AOF:

2、自动触发AOF重写 

3、重写规则:

三、AOF的备份恢复:

1、正常恢复:

2、异常恢复:

四、重写流程:

五、AOF优缺点:

1、优点:

2、缺点:


一、AOF原理

 AOF 日志存储的是 Redis 服务器的顺序指令序列,AOF 日志只记录对内存进行修改的指令记录。假设 AOF 日志记录了自 Redis 实例创建以来所有的修改性指令序列,那么就可以通过对一个空的 Redis 实例顺序执行所有的指令,也就是「重放」,来恢复 Redis 当前实例的内存数据结构的状态。

1、写入机制:

Redis 在收到客户端修改命令后,先进行相应的校验,如果没问题,就立即将该命令存追加到 .aof 文件中,也就是先存到磁盘中,然后服务器再执行命令。这样就算遇到了突发的宕机情况情况,也只需将存储到 .aof 文件中的命令,进行一次“命令重演”就可以恢复到宕机前的状态。

2、缓冲机制:

在上述执行过程中,有一个很重要的环节就是命令的写入,这是一个 IO 操作。Redis 为了提升写入效率,它不会将内容直接写入到磁盘中,而是将其放到一个内存缓存区(buffer)中,等到缓存区被填满时采用异步真正将缓存区中的内容写入到磁盘里,Linux 系统的 fsync() 函数可以将指定文件的内容从内核缓存刷到硬盘中。

 但是如果机器突然宕机,AOF 日志内容可能还没有来得及完全刷到磁盘中,这个时候就会出现日志丢失。Redis 为数据的安全性考虑,同样为 AOF 持久化提供了策略配置appendfsync:有三个选项,见第二部分配置参数

3、重写/压缩机制 :

Redis 在长期运行的过程中,aof 文件会越变越长。如果机器宕机重启,“重演”整个 aof 文件会非常耗时,导致长时间 Redis 无法对外提供服务。为了让 aof 文件的大小控制在合理的范围内,Redis 提供了 AOF 重写机制

(1)自动触发AOF重写:Redis 为自动触发 AOF 重写功能,提供了相应的配置策略,默认配置

   

该配置项表示:触发重写所需要的 aof 文件体积百分比,只有当 aof 文件的增量大于 100% 时才进行重写,也就是大一倍。比如,第一次重写时文件大小为 64M,那么第二次触发重写的体积为 128M,第三次重写为 256M,以此类推。如果将百分比值设置为 0 就表示关闭 AOF 自动重写功能。

(2)手动执行BGREWRITEAOF命令,这个命令通过移除AOF文件中的冗余命令来重写AOF文件

127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started

新的 aof 文件记录的数据库数据和原 aof 文件记录的数据库数据完全一致;
新的 aof 文件会使用尽可能少的命令来记录数据库数据,因此新的 aof 文件的体积会小很多;
AOF 重写期间,服务器不会被阻塞,它可以正常处理客户端发送的命令。
即使 Bgrewriteaof 执行失败,也不会有任何数据丢失,因为旧的 AOF 文件在 Bgrewriteaof 成功之前不会被修改

4、运行流程

(1)客户端的请求写命令会被append追加到AOF缓冲区内
(2)AOF缓冲区会根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件进行重写(rewrite),压缩AOF文件容量
(4)redis服务器重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的。

二、AOF文件配置
1、开启AOF:

 AOF默认不开启,可以在 redis.conf 文件中对AOF进行配置开启:

  

appendonly no # 是否开启AOF,yes:开启,no:不开启,默认为no
appendfilename "appendonly.aof" # aof文件名称,默认为appendonly.aof
dir ./ # aof文件所在目录,默认./,表示执行启动命令时所在的目录
2、自动触发AOF重写/压缩 

见原理部分。

3、appendfsync同步频率:

默认为Everysec,有三个选项

(1)Always:服务器每写入一个命令,就调用一次 fsync函数,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,也不会丢失任何已经成功执行的命令数据,但是其执行速度较慢;
(2)Everysec(默认):服务器每一秒调用一次 fsync 函数,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,最多只丢失一秒钟内的执行的命令数据,通常都使用它作为 AOF 配置策略;
(3)No:服务器不主动调用 fsync 函数,由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下,服务器遭遇意外停机时,丢失命令的数量是不确定的,所以这种策略,不确定性较大,不安全。

4、重写/压缩规则:

no-appendfsync-on-rewrite:重写时,不会执行appendfsync操作

no-appendfsync-on-rewrite no

 该参数表示在正在进行AOF重写时不会将AOF缓冲区中的数据同步到旧的AOF文件磁盘,也就是说在进行AOF重写的时候,如果此时有写操作进来,此时写操作的命令会放在aof_buf缓存中(内存中),而不会将其追加到旧的AOF文件中,这么做是为了避免同时写旧的AOF文件和新的AOF文件对磁盘产生的压力。
(1)默认是ON,表示关闭,即在AOF重写时,会对AOF缓冲区中的数据做同步磁盘操作,这在很大程度上保证了数据的安全性。但是遇到重写操作,可能会发生阻塞。(数据安全,但是性能降低)

(2)如果no-appendfsync-on-rewrite为yes,不写入aof文件,只写入缓存,用户请求不会阻塞,但是在这段时间如果宕机会丢失这段时间的缓存数据。(降低数据安全性,提高性能)。

但在数据量很大的场景,因为两者都会消耗磁盘IO,对磁盘的影响较大,可以将其设置为“yes”减轻磁盘压力,但在极端情况下可能丢失整个AOF重写期间的数据。

三、AOF的备份恢复:

AOF的备份机制和性能虽然和RDB不同,但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。

1、正常恢复:

(1)修改默认的appendonly no,改为yes

(2)将有数据的aof文件复制一份保存到对应的目录(查看目录:config get dir)

(3)恢复:重启redis然后重新加载

2、异常恢复:

(1)修改默认的appendonly no,改为yes

(2)如遇到aof文件损坏,通过 redis-check-aof --fix appendonly.aof 进行恢复,appendonly.aof是文件名

四、重写流程:

1、手动执行 bgrewriteaof命令触发重写,判断是否当前有bgfsave或bgrewriteaof在运行,如果有,则等待该命令结束后再继续执行
2、主进程fork出子进程执行重写操作,保证主进程不会阻塞
3、子进程遍历redis内存中的数据到临时文件,客户端的写请求同时写入aof_buf缓冲区和aof_rewrite_buf重写缓冲区保证原AOF文件完整性以及新AOF文件生成期间的新的数据修改动作不会丢失
4、子进程写完新的AOF文件后,向主进程发送信号,父进程更新统计信息
5、主进程把aof_rewrite_buf中的数据写入到新的AOF文件
6、使用新的AOF文件覆盖旧的AOF文件,完成AOF重写

五、AOF优缺点:
1、优点:

(1)备份机制更稳健,丢失数据概率更低

(2)可读的日志文本,通过操作AOF文件,可以处理误操作

2、缺点:

(1)比RDB占用更多的磁盘空间

(2)恢复备份速度要慢

(3)每次读写都同步的话,有一定的性能压力

(4)存在个别bug,造成不能恢复

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

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

相关文章

VRPSolverEasy:支持VRP问题快速建模的精确算法Python包

文章目录 前言一步步安装免费版主要模块介绍1. depot point2. customer point3. links4. vehicle type VRPTW 算例数据说明模型建立输出求解状态及结果 前言 VRPSolverEasy 是用于车辆路径问题(VRP)的最先进的分支切割和定价算法求解器1,它的…

苹果要在iPhone上运行AI大模型?

近两年,人工智能(AI)技术已经成为各大科技公司的重点研究领域,苹果公司自然也不甘落后。最新消息称,苹果甚至打算在iPhone上直接运行AI大模型... 据苹果AI研究人员表示,他们发明了一种创新的闪存利用技术&a…

云服务器CVM_云主机_云计算服务器_弹性云服务器

腾讯云服务器CVM提供安全可靠的弹性计算服务,腾讯云明星级云服务器,弹性计算实时扩展或缩减计算资源,支持包年包月、按量计费和竞价实例计费模式,CVM提供多种CPU、内存、硬盘和带宽可以灵活调整的实例规格,提供9个9的数…

用冒泡排序谈默认参数应用

前面在调用函数提到为了将信息打印到ofil中&#xff0c;前面提到的办法是 ofstream ofil("text_out1"); void bubble_sort(vector<int> vec){ } 在file scope中定义ofil&#xff0c;这是一个不受欢迎的举动。这样比较难在其他环境重用 一般的程序编写法则是&…

本周五上海见 第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛(上海站)即将召开

低时延技术是证券基金期货领域业务系统的核心技术&#xff0c;是打造极速交易系统领先优势的关键&#xff0c;也是证券基金行业关注的前沿技术热点。 1月19日下午&#xff0c;第二届证券基金行业先进计算技术大会暨2024低时延技术创新实践论坛&#xff08;上海站&#xff09;即…

VL171 VL170配合LDR6020的type-c母座显示器方案

兼容基于VASEL控制引脚的10 Gbps USB3.2 Gen2和AM所有4通道视频&#xff0c;包括DP1.4 8.1 Gbps VL171配合LDR6020实现的type-c桌面显示器方案电路LDR6020是一个DRP的PD芯片&#xff0c;PD芯片与主机通讯完之后&#xff0c;通过PD芯片去控制VL171实现正反插与USB信号和DP信号的…

使用Go语言处理Excel文件的完整指南

xcel文件是广泛用于存储和处理数据的常见文件格式。在Go语言中&#xff0c;有许多库和工具可用于处理Excel文件。本文将介绍如何使用Go语言处理Excel文件&#xff0c;包括读取、写入和修改Excel文件&#xff0c;以及处理单元格、行和列等操作。无论是从头开始创建Excel文件&…

日期处理第一篇--优雅好用的Java日期工具类Joda-Time

日常开发中&#xff0c;处理时间和日期是很常见的需求。基础的java内置工具类只有Date和Calendar&#xff0c;但是这些工具类的api使用并不是很方便和强大&#xff0c;于是就诞生了Joda-Time这个专门处理日期时间的库。 简介 Joda-Time提供了Java日期处理的优雅的替代品&…

Gorm 应用开发时区问题与unique唯一索引字段数据冲突问题

文章目录 一、定义表模型时区问题1.1 time.Time 与int641.2 优势 二、unique唯一索引字段数据冲突问题 一、定义表模型时区问题 1.1 time.Time 与int64 一般情况下&#xff0c;我们在定义表模型的时候&#xff0c;会使用time.Time&#xff0c;但是会根据当前时间存储。返回给…

Javascript,到底要不要写分号?

小白随机在互联网上乱丢一些赛博垃圾&#xff0c;还望拨冗批评斧正。 要不要加分号&#xff1f; 先说结论&#xff1a;“不引起程序出错的前提下&#xff0c;加不加都可以&#xff0c;按自身习惯来。” 为什么JS可以不加分号&#xff1f; 实际上&#xff0c;行尾使用分号的风…

深度学习记录--归—化输入特征

归化 归化输入(normalizing inputs),对特征值进行一定的处理&#xff0c;可以加速神经网络训练速度 步骤 零均值化 通过x值更新让均值稳定在零附近&#xff0c;即为零均值化 归化方差 适当减小变量方差 解释 归化可以让原本狭长的数据图像变得规整&#xff0c;梯度下降的…

JavaScript基础(27)_内联样式的获取和修改、获取元素当前显示的样式

内联样式的获取和修改 获取元素的内联样式&#xff1a; 语法&#xff1a;元素.style.样式名 注意&#xff1a;通过style属性设置和读取的都是内联样式&#xff0c;无法读取样式表中的样式。 修改元素的内联样式&#xff1a; 语法&#xff1a;元素.style.样式名 样式值比如…

Apache JMeter 3.1压力测试监控服务器数据(cpu、内存、磁盘io等)

Apache JMeter 3.1压力测试 Apache JMeter 3.1压力测试监控cpu、内存情况1.下载Apache JMeter 3.11.1 添加线程组1.2 添加http请求1.3 增加http请求头设置1.4 添加csv配置1.5 添加测试结果监控配置 2. 监控插件下载3. 服务端插件下载并启动3.1 下载3.2 解压并启动3.3 增加服务器…

136基于matlab的自适应滤波算法的通信系统中微弱信号检测程序

基于matlab的自适应滤波算法的通信系统中微弱信号检测程序&#xff0c;周期信号加入随机噪声&#xff0c;进行滤波&#xff0c;输出滤波信号&#xff0c;程序已调通&#xff0c;可直接运行。 136 matlab自适应滤波算法LMS (xiaohongshu.com)

提高支撑座效率的重要性

自动化机械设备在运行过程中需要消耗大量的能源和资源&#xff0c;提高效率意味着更有效地利用这些资源&#xff0c;降低运行成本&#xff0c;而支撑座作为自动化机械设备中重要的传动元件&#xff0c;提高支撑座的效率对于自动化机械设备的可持续发展和企业的竞争力具有重要意…

2024华数杯国际赛A题B题思路及代码!

大家好&#xff0c;这里是本次华数杯国际数学建模竞赛的AB题思路代码讲解贴。 关于思路&#xff0c;可以移步我的视频讲解&#xff1a; 2024华数杯国际赛数学建模选题建议及初步思路&#xff01;_哔哩哔哩_bilibili 本篇主要讲解代码。 问题A&#xff1a;日本放射性废水 对…

Springboot+vue的智能家居系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的智能家居系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的智能家居系统&#xff0c;采用M&#xff08;model&a…

二叉树的概念|满二叉树与完全二叉树|二叉树的性质|二叉树的存储结构

前言 在数据结构中树的用途其实并不大&#xff0c;用得更多的其实是二叉树。所以在本章我们将详细讲解二叉树。 一、二叉树的概念及结构 1、概念 一颗二叉树是结点的一个有限集合&#xff0c;该集合&#xff1a; 或者为空或者由一个根节点加上两颗&#xff08;互不相交&…

云计算入门——Linux 命令行入门

云计算入门——Linux 命令行入门 前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 如今&#xff0c;我们许多人都熟悉计算机&#xff08;台式机和笔记本电…

VMware workstation安装SUSE Linux Enterprise Server 12 SP5虚拟机并配置网络

VMware workstation安装SUSE Linux Enterprise Server 12 SP5虚拟机并配置网络 SUSE Linux Enterprise Server是企业级Linux系统&#xff0c;适合企业应用。该文档适用于在VMware workstation平台安装SUSE Linux Enterprise Server虚拟机。 1.安装准备 1.1安装平台 Windows…