【Redis】持久化(下)-- AOF
文章目录
- AOF
- 概念
- 如何使用AOF
- AOF工作流程
- 命令写入演示
- 文件同步策略
- `AOF`的重写机制
- 概念
- 触发重写机制
- `AOF`重写流程
- 启动时数据恢复
- 混合持久化
- 总结
AOF
概念
AOF
持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF
文件中的命令达到恢复数据的目的.AOF
的主要作用是解决了数据持久化的实时性,目前已经是Redis
持久化的主流方式.
如何使用AOF
开启AOF
功能需要修改配置文件:appendonly yes
,默认情况下不开启.AOF
文件名通过appendfilename
配置(默认是appendonly.aof
)设置.保存目录同时RDB
持久化方式一致,通过dir
配置指定.(注意:当开启AOF
的时候,RDB
一般就不会生效了)
-
打开配置文件
vim /etc/redis/redis.conf
,将该位置修改为appendonly yes
-
可修改
AOF
文件名:
-
保存目录:
AOF工作流程
- 所有的写入命令会追加到
aof_buf
缓冲区中 AOF
缓冲区根据对应的策略向硬盘做同步操作- 随着
AOF
文件越来越大,需要定期对AOF
文件进行重写,达到压缩目的- 重写:在最终结果一致的情况下,可以剔除命令中一些比较冗余的操作
- 当
Redis
服务器启动实词,可以加载AOF
文件进行数据恢复
命令写入演示
- 我们在配置文件中打开
AOF
持久化后,当我们输入命令时,在var/lib/redis
目录中自动出现了一个新的目录:appendonlydir
- 打开
appendonlydir
目录
-rw-r--r-- 1 root root 88 Oct 6 20:39 appendonly.aof.1.base.rdb
-rw-r--r-- 1 root root 73 Oct 6 20:39 appendonly.aof.1.incr.aof
-rw-r--r-- 1 root root 88 Oct 6 20:39 appendonly.aof.manifest
-
appendonly.aof.1.base.rdb
:这是Redis AOF
文件的基础RDB
(Redis Database Backup
)文件,通常用于在AOF
恢复时提供一个初始的数据库状态。 -
appendonly.aof.1.incr.aof
:这是增量AOF
文件,包含自上次RDB
快照以来对数据库的所有写操作。它是AOF
的核心部分。 -
appendonly.aof.manifest
:这是AOF
文件的清单,包含有关AOF
文件的元数据,如版本、文件大小等。
注意:AOF
命令写入的内容直接是文本协议格式.例如:set key111 11111111111111111;
这条命令,在AOF
文件中会追加如下文本:
疑问1:AOF
作为一种实时备份的持久化方式,是否会影响Redis
的性能呢?
答案: 不会
原因:
AOF
会先写入内存缓冲区aof_buf
中,然后一次性刷入磁盘中,这样可以减少磁盘IO
AOF
在磁盘中时顺序读写,新的命令会追加到原本的文件中
疑问2:AOF
过程中为什么需要aof_buf
这个缓冲区?
Redis
使用单线程响应命令,如果每次写AOF
文件都直接同步到硬盘中,性能就会从内存的读写变成IO
读写,性能必然下降.所以,先写入缓冲区中可以有效减少IO
次数,同时,Redis
还可以提供多种缓冲区同步策略,让用户根据自己的需求做出合理的平衡.
文件同步策略
Redis
提供了多种AOF
缓冲区同步文件策略,由参数appendfsync
来控制.
在配置文件中:
可配置值 | 说明 |
---|---|
always | 命令写入aof_buf 后调用fsync 同步,完成后返回 |
everysec (默认设置) | 命令写入aof_buf 后只执行write 操作,不进行fsync .每秒由同步线程进行fsync |
no | 命令写入aof_buf 后只执行write 操作,由OS 控制fsync 的频率 |
上述的同步文件策略,数据写入磁盘的频率由高到低,性能由低到高
系统调用write
和fsync
说明:
write
会触发延迟写机制.Linux
在内核提供页缓冲区用来提升硬盘IO
性能.write
操作在写入系统缓冲区后立即返回.同步硬盘操作依赖于系统调度控制,例如:缓冲区页空间写满或者达到了特定的时间周期.同步文件之前,如果此时系统故障宕机,缓冲区内数据将会丢失.(即 将内存中的数据先写入到内核的页缓冲区中,再由系统调度控制同步硬盘操作)Fsync
针对单个文件操作,做强制硬盘同步,fsync
将阻塞直到数据写入到硬盘
- 配置
always
时,每次写入都要同步AOF
文件,性能很差,在一般的SATA
硬盘上,只能支持大约几百TPS
写入.除非是非常重要的数据,否则不建议配置. - 配置为
no
时,由于操作系统同步策略不可控,虽然提高了性能,但是数据丢失风险大增,除非数据的重要程度很低,否则不建议配置 - 配置为
svseysec
,是默认配置,也是推荐配置,兼顾了数据安全性和性能.理论上最多丢失1
秒的数据
AOF
的重写机制
概念
随着命令不断写入AOF
,文件会越来越大,为了解决这个问题,Redis
引入了AOF
重写机制用来压缩文件的体积.AOF
文件重写是把Redis
进程内的数据转化为写命令同步到新的AOF
文件中
重写后的AOF
文件体积为什么可以变小:
- 进程内已经超时的数据不再写入到文件中
- 旧的
AOF
中的无效命令,例如del
,hdel
,srem
等重写后将会删除,只需要保留数据的最终版本 - 多条写操作合并为一条,例如:
lpush list a
,lpush list b
,lpush list c
可以合并为lpush list a b c
.
较小的AOF
文件一方面降低了硬盘空间的占用,一方面可以提升启动Redis
时数据恢复的速度
触发重写机制
触发重写机制分为:手动触发和自动触发
- 手动触发:调用
bgrewriteaof
命令 - 自动触发:根据
auto-aof-rewrite-min-size
和auto-aof-rewrite-percentage
参数确定自动触发的时机(在配置文件中可自行配置)auto-aof-rewrite-min-size
:表示触发重写时AOF
的最小文件大小,默认为64MB
auto-aof-rewrite-percentage
:代表当前AOF
占用大小相比较上次重写时增加的比例
AOF
重写流程
- 执行
AOF
重写请求:如果当前进程正在执行AOF
重写,请求不执行.如果当前进程正在执行bgsave
操作,冲写命令延迟到bgsave
执行结束之后再执行 - 父进程执行
fork
创建子进程 - 重写:不关心原来的
AOF
文件的状态,子进程只需要把内存中当前的数据获取出来,再以AOF
的格式写入到一个新的AOF
文件中- 主进程
fork
之后,继续响应其他命令.所有修改操作写入AOF
缓冲区之后再根据appendfsync
策略同步到硬盘中,保证旧AOF
文件机制正确 - 子进程只有
fork
之前的所有内存信息,父进程中需要将fork
之后这段时间的修改操作写入到AOF
重写缓冲区中
- 主进程
- 子进程根据内存快照,将命令合并到新的
AOF
文件中去 - 子进程完成重写
- 新文件写入后,子进程发送信号给父进程
- 父进程把
AOF
重写缓冲区内临时保存的命令追加到新的AOF
文件中 - 用新
AOF
文件替换老的AOF
文件
启动时数据恢复
当Redis
启动时,会根据RDB
和AOF
文件的内容,进行数据恢复
根据持久化文件进行数据恢复
混合持久化
混合持久化结合了RDB
和AOF
的特点,按照aof
的方式,每一个请求/操作,都记录写入aof-use-rdb-preamble
文件中,在触发aof
重写之后,就会把当前的内存状态按照rdb
的二进制格式写入到新的AOF
文件中,后续在进行操作,仍然是按照aof
的文本格式追加到文件后面
总结
Redis
提供了两种持久化的方案:RDB
和AOF
RDB
视为内存快照,产生的内容更为紧凑,占用空间小,恢复速度更快.但是产生RDB
的开销较大,不适合进行实时持久化,一般用于冷备和主从复制AOF
视为对修改命令保存,在恢复时需要重放命令.并且有重写机制来定期压缩AOF
文件RDB
和AOF
都是用fork
来创建子进程,利用Linux
子进程拥有父进程内存快照的特点来进行持久化,尽可能不影响主进程继续处理后续命令.
相关文章:

【Redis】持久化(下)-- AOF
文章目录 AOF概念如何使用AOFAOF工作流程命令写入演示文件同步策略 AOF的重写机制概念触发重写机制AOF重写流程 启动时数据恢复混合持久化总结 AOF 概念 AOF持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的.AOF的主要作用是解决…...
用Arduino单片机制作一个简单的音乐播放器
Arduino单片机上有多个数字IO针脚,可以输出数字信号,用于驱动发声器件,从而让它发出想要的声音。蜂鸣器是一种常见的发声器件,通电后可以发出声音。因此,单片机可以通过数字输出控制蜂鸣器发出指定的声音。另外&#x…...

软件工程相关
1.软件过程模型(重要) 1.1.瀑布模型 只适合需求明确的项目严格串行化,很长时间才能看到结果。严格区分阶段,每个阶段因果紧密相连,且要求每个阶段一次性解决该阶段的任务 1.2.原型模型(构造简易模型确定…...

速盾:游戏加速下载可以用cdn吗?
随着互联网的快速发展,游戏下载已经成为许多游戏玩家的常见需求。然而,由于游戏文件体积庞大,下载速度经常成为制约因素之一。为了解决这个问题,许多玩家开始寻找可以加速游戏下载速度的方法。其中一种常见的方法是使用CDN&#x…...

每日新闻掌握【2024年9月25日 星期三】
2024年9月25日 星期三 农历八月廿三 大公司/大事件 央行降低存量房贷利率,二套房贷最低首付比例下调到15% 国务院新闻办公室9月24日上午举行新闻发布会,中国人民银行、金融监管总局、中国证监会主要负责人介绍了金融支持经济高质量发展有关情况。多项重…...

8. Bug 与 Error
计算机程序中的缺陷通常被称为 bug。把它们想象成偶然爬进我们工作中的小东西,会让程序员感觉良好。当然,实际上是我们自己把它们放进去的。 如果程序是思想的结晶,我们可以将错误大致分为思想混乱造成的错误和将思想转化为代码时引入错误造成…...

论文 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust
这篇论文研究了使用提示 (Prompting) 方法微调预训练语言模型,以提高其在对抗样本攻击下的鲁棒性。论文的主要贡献如下: 1.MVP 比 MLP-FT 更鲁棒: 论文比较了 MVP (Model-tuning Via Prompts) 和传统的 MLP-FT (Fine-tuning with an MLP head…...

828华为云征文|华为云Flexus云服务器X实例部署 即时通讯IM聊天交友软件——高性能服务器实现120W并发连接
营运版的即时通讯IM聊天交友系统:特点可发红包,可添加多条链接到用户网站和应用,安卓苹果APPPC端H5四合一 后端开发语言:PHP, 前端开发语言:uniapp混合开发。 集安卓苹果APPPC端H5四合一APP源码࿰…...

超好用的element的el-pagination分页组件二次封装-附源码及讲解
前言:在很多后台管理系统开发时总会有很多分页组件的使用,如果我们每次都用elementui官网的el-pagination去写的话,调整所有分页的样式就会很麻烦,而且页面内容也会很累赘繁琐。 讲解一个我经常使用的二次封装el-pagination组件&…...

【AIGC】通过OpenAi Canvas修改论文(附40条论文优化指令)
目录 1、用ChatGPT优化论文大纲和逻辑2、用ChatGPT充实论文内容3、用ChatGPT寻找案例和数据4、用ChatGPT检查语法和字词错误5、如何直接使用ChatGPT4o、o1、OpenAI Canvas6、OpenAI Canvas增强了啥?7、编程功能增强 在刚开始撰写学术论文时,很多小伙伴感…...

Kubernetes Pod详解
目录 1. Pod 介绍 1.1 Pod 结构 1.2 Pod 定义 2. Pod 配置 2.1 基本配置 2.2 镜像拉取 2.3 启动命令 2.4 环境变量 2.5 端口设置 2.6 资源配额 3. Pod 生命周期 3.1 创建和终止 3.2 初始化容器 3.3 钩子函数 3.4 容器探测 3.5 重启策略 4. Pod 调度 4.1 定向调…...

Vue2电商项目(七)、订单与支付
文章目录 一、交易业务Trade1. 获取用户地址2. 获取订单信息 二、提交订单三、支付1. 获取支付信息2. 支付页面--ElementUI(1) 引入Element UI(2) 弹框支付的业务逻辑(这个逻辑其实没那么全)(3) 支付逻辑知识点小总结 四、个人中心1. 搭建二级路由2. 展示动态数据(1). 接口(2).…...

你知道U盘怎么加密吗?
1、使用Windows BitLocker: 适用于Windows 10/11专业版及以上版本。 插入U盘,右键点击U盘图标,选择“启用BitLocker”。 设置密码,并选择加密选项,点击“开始加密”。 2、使用Mac的Disk Utility: 适用…...

【软件教程OBS下载使用】一篇文章教会你如何下载安装使用OBS-Studio
OBS Studio是全新的OBS(Open Broadcaster Software),是一款广泛应用的视频直播录制软件,跟经典版的区别就是,音频分路简单,在不出错的情况下性能优于经典版。可以说是高级版,目前仍然处于初期阶段,比起经典…...

鸿蒙next开发第一课03.ArkTs语法介绍-案例
前面已经学习了ArkTs的基本语法和DevEcoStudio的基本操作,接下来按照官方提示开发一个基本案例。 该案例是系统自带的demo,下载下来源代码后可以直接运行。 接下来我来演示如何运行demo。我在demo中加入了自己的注释。 切记:文件夹不能有中…...

HTML网页制作——设计系学生静态HTML网页设计作品
HTML网页制作——设计系学生静态HTML网页设计作品 网站主题为荷兰风格派,主要介绍荷兰风格设计的网站,由设计系学生亲自设计,独立开发网页,适用于学生自己的作品。 网站效果视频: 荷兰风格派(设计系学生网…...

智能翻译新纪元:4款英汉互译在线工具解析
大家好,我是一个喜欢找各种办公软件的人,今天咱们来聊聊那些让我们在英汉互译世界里如鱼得水的神器——福昕翻译在线、福昕翻译大师、海鲸AI论文翻译,还有DeepL翻译。这些家伙,简直就是我们跨语言交流的超级英雄! 1、…...

Cisco Meraki平台中国区注册
登陆下面网址注册cisco meraki中国区云平台账户 https://n4.meraki.cn/ 点击创建一个新账户 地区选择“china” 填写邮箱,名字,秘密,公司名称等信息,点击注册新账户 注册的邮箱会收到一封确认此邮箱的邮件,点击…...

分享国产RISC-V单片机通用
开源已经成为构建新技术生态的主流趋势。基于开源指令集 RISC-V 的软硬件生态正在飞速扩增,并且已经迅速扩展至个人 PC、服务器和人工智能等领域。RISC-V 的灵活性和可扩展性使其能够在应用处理器和AI加速领域迅速发展。 RAMSUN提供的RISC-V单片机,开源…...

java 网络知识 + 多线程问题
服务器: package p1007;import java.io.*; import java.net.*; import java.util.Random;public class Server {public static void main(String[] args) {int port 12345; // 服务端口try (ServerSocket serverSocket new ServerSocket(port)) {System.out.print…...

android 菜单不显示auto time zone菜单
packages\apps\Settings\res\xml\date_time_prefs.xml 有对应的xml packages\apps\Settings\src\com\android\settings\datetime\AutoTimeZonePreferenceController.java Overridepublic boolean isAvailable() {if (mIsFromSUW) {return false;}TimeZoneCapabilities time…...

51单片机的金属探测器【proteus仿真+程序+报告+原理图+演示视频】
1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块金属检测传感器继电器LED、蜂鸣器等模块构成。适用于金属探测仪、检测金属、剔除金属等相似项目。 可实现功能: 1、LCD1602实时显示是否检测到金属 2、金属检测传感器(按键模拟)检测是否有…...

使用Spring Security实现用户-权限-资源的精细化控制
文章目录 一、基于权限的请求控制二、加载用户权限信息三、自定义异常处理四、注册自定义异常处理器五、总结 在开发Web应用时,权限管理是一个不可忽视的部分。最近在项目中,我使用了Spring Security来实现用户、权限、资源之间的精细化控制。这里我想分…...

动态规划10:174. 地下城游戏
动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:174.…...

【数据结构】链表-1
数组 数组在分配内存的时候需要先告诉系统它有多大,为什么呢?打个比方,我们有以一列的凳子,按顺序排布,一个位置只放一个,数组呢,是一个家庭,数组这个家庭呢,他们得挨着…...

Python进阶--正则表达式
目录 1. 基础匹配 2. 元字符匹配 1. 基础匹配 正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则ÿ…...

富格林:发现潜在欺诈安全交易
富格林指出,在全球经济不确定性加剧的背景下,黄金的避险优势再次吸引了投资者的关注。尤其是在今年,随着多种因素的变化,金价的走势引发了市场的广泛讨论。但事实上黄金与其他投资品类相似,也存在潜在的欺诈套路导致我…...

Linux复习--Linux服务管理类(SSH服务、DHCP+FTP、DNS服务、Apache服务、Nginx服务、HTTP状态码)
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、SSH服务 1、问题引出 哪些设置能够提升SSH远程管理的安全等级? 2、SSH的登录验证方式-口令登录 3、SSH的登录验证方式-密钥登录 4、…...

如何用大模型来提升学习效率?
自从2022年底ChatGPT横空出世以来,在过去的十几个月里,生成式人工智能的浪潮席卷并改变着各行各业。 2023年一月,在线课程供应商Study.com曾向1000名18岁以上的学生发起的一项调查显示,当时就已经有超过89%的学生使用ChatGPT来完…...

SQL进阶技巧:如何优雅求解指标累计去重问题?
目录 0 需求概述 1 数据准备 2 问题分析 3 小结 0 需求概述 近期公司开发某项学习功能,改功能有很多学习内容(如java,C,python等方向),每天都会有众多学习用户学习某一项或者多项学习内容。产生数据如下表: 产生数据如下表: 日期 内容 学习用户 2022…...