Redis:AOF持久化

server/2024/10/22 2:36:26/

1. 简介

以日志的形式来记录每个写操作,将redis执行的每个写操作记录下来(读操作不记录),只需追加文件但不可以改写文件,redis启动之初会重新构建数据,即redis重启后会将日志中的所有写指令重新执行一遍以达到数据重构的效果

2. 工作流程

1
Client作为命令的来源,会有多个源头以及源源不断的请求命令。
2
在这些命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
3
AOF缓冲会根据AOF缓冲区 同步文件的三种写回策略将命令写入磁盘上的AOF文件。
4
随着写入AOF内容的增加为避免文件膨胀,会根据规则进行命令的合并(又称 AOF重写),从而起到AOF文件压缩的目的。
5
当Redis Server 服务器重启的时候会从AOF文件载入数据。

3. 三种回写策略 

  • Always

同步回写,每个写命令执行完立刻同步的将日志写入磁盘中

  • everysec

每秒回写,每个命令执行完,只是先把日志写到AOF文件内存缓冲区,每隔一秒将内存缓冲区的内容写入磁盘 

  • no

操作系统控制写回,每个命令执行完只是先把日志写到AOF内存缓冲区,再由操作系统决定何时将缓冲区内容写入磁盘

4. 优势和不足

5. 重写机制

5.1 简介 

 由于AOF持久化是Redis不断将写命令记录到 AOF 文件中,随着Redis不断的进行,AOF 的文件会越来越大,

文件越大,占用服务器内存越大以及 AOF 恢复要求时间越长。

为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,

只保留可以恢复数据的最小指令集

或者

可以手动使用命令 bgrewriteaof 来重新

 5.2 触发机制

  •  自动触发

满足配置文件中的选项后,redis会记录上次重写时AOF的大小,默认配置是当AOF文件大小是rewire两倍且文件大小大于64M时触发

  • 手动触发

客户端向服务器发送bgrewriteaof命令

5.3 重写原理

1:在重写开始前,redis会创建一个“重写子进程”,这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。

2:与此同时,主进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。

3:当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中

4:当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中

5:重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

6. 总结


http://www.ppmy.cn/server/90121.html

相关文章

Linux Vim教程(二):基本命令和操作

目录 1. 进入和退出Vim 1.1 启动Vim 1.2 退出Vim 2. 模式切换 2.1 切换到插入模式 2.2 切换到普通模式 2.3 切换到命令模式 2.4 切换到可视模式 3. 移动光标 4. 编辑文本 4.1 插入和追加文本 4.2 删除文本 4.3 复制和粘贴文本 4.4 撤销和重做 5. 搜索和替换 5.…

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效 本篇,推荐给你几个按钮,先看一下图片 本例图片 案例分析 这是一个系列的按钮,它们具有共同的特点: 底层按钮层,具有一个彩色的渐变边框,上层是依据hover效果需要,可以是渐变,可以时白色。 鼠标hover效果…

greenplum pg_stat_activity说明

视图pg_stat_activity每行详细显示服务器每个进程,其中包含有关相关用户会话和查询的详细信息。除非关闭了参数stats_command_string,否则报告当前查询数据的列是可用的。此外,只有当检查视图的用户是超级用户或与拥有所报告进程的用户相同时…

html+css 实现水波纹按钮

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 文…

关于gateway与oauth2的兼容问题处理

文章目录 前言问题解决方案手写RPC采用spring feign调用采用JWT解析 前言 令牌鉴权方案的选择上,比较流行的有spring security 自定义的令牌(比如JWT令牌)、spring securityoauth2,假如使用了spring security oauth2的方案&…

【Rust日报】跨平台高性能计算语言扩展CubeCL

[rust is best]10 亿行挑战方案 作者尝试优化 Rust 中「10 亿行挑战」的解决方案。从原始的 5 分钟优化到了 9 秒。 作者的主要目标是创建一段简单、可维护且生产就绪的代码,而且没有使用不安全的操作。以下是一些关键经验: 使用 --release 优化构建避免…

【Android】安卓四大组件之广播知识总结

文章目录 动态注册使用BroadcastReceiver监听Intent广播注册Broadcast Receiver 静态注册自定义广播标准广播发送广播定义广播接收器注册广播接收器 有序广播修改发送方法定义第二个广播接收器注册广播接收器广播截断 使用本地广播实践-强制下线使用ActivityCollector管理所有活…

LLM 大语言模型显存消耗估计与计算

LLM 大语言模型显存消耗估计与计算 1. LLM 大语言模型开发流程 在大模型(如 LLaMA-7B、GPT-3 等)的开发、训练、微调、推理和部署过程中,各个阶段的流程都涉及多个复杂的步骤。以下是详细的流程描述,涵盖训练和微调的区别&#…