Redis:AOF持久化

news2024/11/20 23:30:16

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.coloradmin.cn/o/1954652.html

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

相关文章

html+css 实现单选按钮动画(input radio按钮)

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

kuberneter管理GUI工具Lens

从github上可以知道,lens的前端是用electron做的客户端工具,打开安装路径你会发现kubectl.exe,没错,就是你经常用的kubectl命令行的客户端工具。kubectl本来就能输出json的数据类型,集成前端更方便了。看到这里你是不是发现&#…

在线投稿小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,编辑管理,用户文章管理,文章分类管理,文章展示管理,文章稿酬管理,通知公告管理,系统管理 微信端账号功能包…

5、从0搭建企业门户网站——Tomcat下载、安装与使用

目录 正文 1、下载Tomcat 2、安装Tomcat 3、运行Tomcat 4、停止Tomcat 正文 企业门户网站软件开发完成后,我们需要在云服务器上运行我们的软件,安装Tomcat是很有必要的。下面以Tomcat 10为例,演示其下载、安装与使用。 1、下载Tomcat Tomcat 10下载地址 将Tomcat 10下…

基于Java的模拟写字板的设计与实现

点击下载链接 基于Java的模拟写字板的设计与实现 摘要:目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并且涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首…

前端和Postman调用同一个接口,拿到的数据不一样

1、表现 联调一个List接口,Postman自测得到的ID和前端调用得到的ID,结果不一样。前者结果: 后者结果: 同一份代码、同一个数据库,出现这种错误,大概率是类型转换时出问题了,但检查代码发现&…

[工具] GitHub+Gridea+GitTalk 搭建个人免费博客

文章目录 起因GitHub创建个人仓库存主页创建用于Gridea连接的Token Gridea配置 GitTalk大功告成 起因 想要搭建自己的博客网站,又不想花钱买域名,也不会前端技术,只能求助于简单(傻逼式)且免费的博客搭建方式。偶然间看到这种方式&#xff0…

视频播放--vue3+西瓜播放器

西瓜播放器官网 实现方式非常简单,只需三步:安装、DOM占位、实例化即可完成播放器的使用 安装 npm install xgplayer 引入 import Player from "xgplayer"; import "xgplayer/dist/index.min.css"; 注意:一定要引入…

最新风车IM即时聊天源码及完整视频教程2024年7月版

堡塔面板 试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7) 可能存在少量兼容性问题 不断优化中 curl -sSO http://io.bt.sy/install/install_panel.sh && bash install_panel.sh 1.宝塔环境如下: Nginx 1.20 Tomcat 8 MySQL 8.0 R…

生物学家做不出 AlphaGO,但也在创造生命……

提到人造生命(Artificial Life),你会想到什么? 也许是希腊、玛雅、中国神话故事里的人造生物,亦或者是科幻电影里可以执行命令的机器人,也可能是这几年以 AlphaGo 为代表的人工智能技术(AI&…

【虚拟机】 VMware截图版详细安装教程

VMware-workstation-full-17.5.1-23298084 的安装,详细安装过程。 1.以管理员身份运行安装包 点击文件,右键打开,以管理员身份运行; 2.根据安装提示,重启电脑; (重启与否看自己电脑情况&…

【题解(c++)】「蓝桥·算法双周赛」第十五场分级赛——强者挑战赛

竞赛链接 目录 老君炼丹【算法赛】大意思路 拯救美猴王【算法赛】大意思路打卡蓝桥杯周赛! 老君炼丹【算法赛】 大意 有一个数组,每一次可以选择两个元素 a i , a i ≤ 0 a_i,a_i\le0 ai​,ai​≤0和一个 a j , a j ≥ 0 a_j,a_j\ge0 aj​,aj​≥0&am…

前端必知必会-html布局和响应式网页设计

文章目录 HTML 布局CSS 框架CSS 浮动布局CSS flex布局CSS 网格布局HTML 响应式网页设计设置viewport响应式图像使用 max-width 属性根据浏览器宽度显示不同的图像响应式文本大小媒体查询Bootstrap总结 HTML 布局 HTML5 有几个语义元素,它们定义网页的不同部分&#…

【Python系列】Python 中的垃圾收集:深入理解与实践

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

vue中使用Marked实现预览md文件(base64编码图片)

vue中使用Marked实现预览md文件(base64编码图片) 在上一篇vue-markdown实现预览md文件时,后端返回的图片格式是base64格式的,试了很多方法都不能显示,因此换成了marked插件进行预览,同时也支持显示大纲目录…

入门 PyQt6 看过来(案例)12~ 列表增删排序

本文介绍如何实现列表增加删除和排序的功能,效果如下: 1 页面设计 1.1 列表 #列表数据self.list [福宝, 萌兰, 金虎,蓝天]# 创建四行一列标准数据模型self.modeQStandardItemModel(4,1)# 将数据中的列表项作为标准数据模型输出for i in range(self.mod…

17.延迟队列

介绍 延迟队列,队列内部是有序的,延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中,消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺,如果十天内没…

tomat 启动项目请求中文乱码 日志乱码

tomat 启动项目请求中文乱码 日志乱码 tomat 启动项目请求中文乱码 日志乱码检查tomcat编码检查项目编码检查服务器编码修改catalina.bat 测试 tomat 启动项目请求中文乱码 日志乱码 项目部署后 请求信息中文乱码 {""address":"娴嬭瘯", "Prov…

【Django】ajax和django接口交互(获取新密码)

文章目录 一、需求1. 效果图 二、实验1. 写get接口后端2. 写html后端3. 写前端4. 测试 一、需求 1. 效果图 二、实验 1. 写get接口后端 写views import string import random def getnewpwd(request):words list(string.ascii_lowercasestring.ascii_uppercasestring.digi…

C# form的移植工作

前言: 目标,将一个项目的form移植到新的工程下,且能够正确编译执行: 1 Copy form的两个文件到新工程下: 比如笔者的logo form 2 修改命名空间: 然后,找到新项目的主程序: 的命名…