【Redis】Redis持久化模式AOF

目录

引言

AOF持久化模式​编辑​编辑

AOF与RDB的混合持久化(4.x后的新特性)

AOF的优缺点

修复破损aof文件

到底用RDB还是AOF


引言

AOF就相当于上面的日志形式。是追加式备份。所有发生的写操作,新增啊,修改啊,删除啊,这些命令,都会记录在这个AOF日志里。
如果追求数据的一致性,RDB会丢失最后一次的备份数据,所以往往会采用AOF来做。AOF丢失的
数据会比RDB相对来说少一些。
需要注意,redis是先执行写操作指令,随后再把指令追加进aof中。有时候奇葩的面试官会问你先后顺序,有些同学会冷不丁的犹豫一会。
特点:

  • 类似日志的形式,把所有写操作追加到文件,
  • 追加的形式是append,一个个命令追加,而不是修改
    比如说,set k1 abc,set k2 def,set k1 123,虽然有两次k1,但是不会合并,而是追加。(后面会提到压缩)
  • redis恢复的时候先恢复aof,如果aof有问题(比如破损),则再恢复rdb.|
  • redis恢复的时候是读取aof中的命令,从头到尾读一遍,然后数据恢复。
    可以通过 bgrewriteaof 手动触发。异步重写aof日志,假如重写失败,那么数据还是存在的,因为老的aof还在。
     

使用AOF引发的问题思考
Redis运行了好多年了,比如10年,用的AOF,那么假如某一天redis名机挂了
1.这个10年的AOF有 多大?最大可以占用多少空间?有没有可能达到10来个T,或者更大?

  • 按理说会,如果你吃饱了没事做,就只对某个key,新增,修改,删除,无限次的做这样的作,持续了十来年,那么这个aof文件会很大,而且都是重复的命令。但是AOF可以压缩重写,使得体积不大。

2.恢复10几个T文件的时候,内存不大会不会溢出?

  • 不会。虽然文件很大,但是有效的命令实际的不会很多。而且可以压缩重写,这样体积不大读取肯定更加快速。

3.10来个T的aof恢复需要多久,有没有可能1天?1周?

  • 按照现有情况来说,有可能吧。

以上三点都是aof文件庞大而出现的顾虑,其实aof可以重写,对日志有一个重写机制 bgrewriteaof其实也就是瘦身的作用,尝试想一想,如果一个人很胖了,不能越来越胖吧,应该时不时的运动下瘦个身,那么aof重写也是一个道理。

AOF持久化模式

AOF与RDB的混合持久化(4.x后的新特性)


yes:AOF重写,redis会把当前所有的数据以rdb形式存入到aof中,这都是二进制数据,数据量小,随后新的数据以aof形式追加到这个aof中,那么这个aof中包含两种文件类型数据,一个是rdb,一个是aof,那么恢复的时候redis会同时恢复,这样恢复过程会更快。这相当于是一个混合体。
no:关闭混合模式,aof只会压缩重复的命令,这是4.x以前老版本的机制,也就是把重复的没有意义的指令去除,减少文件体积,也减少恢复的时间。

可能会有同学会问,在重写AOF的时候,如果有新的命令进来要写入怎么办?那么他其实也会fork一个子进程,子进程复制重写,而新的那些写入命令会被记录到一个缓冲区,待子进程重写完毕后,缓冲工区的新的写命令会被追加到新的AOF文件中,这样就保持了数据在重写前后的一致性

AOF的优缺点

优点

  • 耐用性高,秒级别备份:AOF更加耐用,可以以秒级别为单位备份(通常我们都是每设置为1秒),如果发生问题,也只会丢失最后一秒的数据,大大增加了可靠性和数据完整性。所以AOF可以每秒备份一次,使用fsync操作。
  • log日志追加,不惧怕磁盘大小限制:以log日志形式追加,如果磁盘满了,会执行redis-check-aof 工具
  • aof过大重写:当数据太大的时候,redis可以在后台自动重写aof,当redis继续把日志追加到老的文件中去时,重写也是非常安全的,不会影响客户端的读写操作。
  • 日志形式更加有利于redis解析和恢复:AOF 日志包含的所有写操作,会更加便于redis的解析恢复

缺点 

  • 相同数据量,AOF比RDB大,更耗时:相同的数据,同一份数据,AOF比RDB大,而且恢复起来也会很耗时,很慢
  • 同步比RDB慢:针对不同的同步机制,AOF会比RDB慢,因为AOF每秒都会备份做写操作,这样相对与RDB来说就略低。 每秒备份fsync没毛病,但是如果客户端的每次写入就做一次备份fsync的话那么redis的性能就会下降。
  • AOF数据可能不完整:AOF发生过bug,就是数据恢复的时候数据不完整,这样显得AOF会比较脆弱,容易出现bug,因为AOF没有RDB那么简单,但是呢为了防止bug的产生,AOF就不会根据旧的指令去重构,而是根据当时缓存中存在的数据指令去做重构,这样就更加健壮和可靠了。

修复破损aof文件

如果aof文件破损,那么可以修复一些无用的命令,使得其还是可以继续恢复正常内容:
redis-check-aof --fix [aof文件名]目的:删除不符合语法的指令
aof-load-truncated yes:Redis启动加载aof,命令语法不完整则修复。设置为no,Redis启动失败,需要手动用redis-check-aof 工具修复

到底用RDB还是AOF

般来说,可以RDB+AOF的同时开启使用。上面已经说了,可以把它们作为一个混合体去使用。如果说用户对redis的写操作不多甚至没有,95%以上都是读操作,那么用rdb也没啥问题,我们有一个项目是采用的缓存预热方式,用户几乎没有写操作,所以直接采用RDB就够用了,因为哪怕redis挂了,甚至RDB没了,数据还是能通过预热重新载入。如果说你们的Redis要作为一部分的数据库来使用,那么需要用到aof,或者rdb&aof的混合模式这样数据的完整性就更大了



 

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

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

相关文章

pdf电子准考证查询下载系统(实证效果可照片)V1.0

CSDNpdf电子准考证查询下载系统(实证效果可照片)V1.0 使用场景: 教育机构比如学校用pdf准考证查询下载系统(实证效果可照片,最适合准考证打印); 也可自定义图片及坐标用于各种优秀党员三好学生等荣誉证书、聘书授权代理pdf电子证书查询与下载。 推荐Linux PHP5.5-7.3使用使…

第七篇 - 人工智能与机器学习技术VS量测(Measurement)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司 - 它是如何赋能数字化营销生态的?

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:鼠标光标控制)

控制鼠标光标的显示样式。 说明: 从API Version 11开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 cursorControl setCursor setCursor(value: PointerStyle): void 方法语句中可使用的全局接口,调用此接口可以更…

增肌_锻炼

目录 练第一步 有氧运动关节活动度 第二步 脊柱侧弯吃 练 https://www.bilibili.com/video/BV14v4y1G7A3 第一步 有氧运动 有氧运动锻炼心肺 最大心率保持在50% - 60% 关节活动度 髋关节活动 亚足背屈   绕肩,肩环绕肩   第二步 高频的中等强度&#xf…

ubuntu_定制文件系统[2]-清理日志log

1.问题现象 系统长时间运行, 产生大量的系统日志 ubuntu/debian 系统日志如下 /var/log$ du -sh * 31M syslog # syslog日志 61M syslog.1 2.5G journal/ # systemd service日志 当日志文件过大, 硬盘空间占用100%时, 导致各种异常 命令按tab补全无响应服务/进程启动异常服务…

Python装饰器笔试题(简单难度)

文章目录 前言用函数调用函数用函数返回函数用函数返回包装函数使用再进一步应用场景 前言 这次遇到了一个比较神奇的面试题:给定方法 def add(x, y):return x y要求在不改变源代码的前提下,使用装饰器,为add方法增加运行时间输出的功能。…

k8s集群的CA证书过期处理

文章目录 制作延期的CA证书获取CA全名准备签发申请配置生成新CA验证并替换CA 更新master组件的CA配置kube-apiserverkube-controller-managerkube-schedulerkube-admin检查证书过期时间 更新ServiceAccount secret更新node组件配置的CA更新kubelet连接配置签发kubelet自动申请的…

Google Play上架:自查封号政策解析(高风险行为之不允许破坏Google Play生态系统中用户信任度的应用或应用内容)

本文章提供给近期被封号的开发者们,希望能带来帮助,有其他的自查方向后续也会发布出来。 ——————————————————————————————————————— 用户数据设备和网络滥用 用户数据 设备和网络滥用

redis 缓存击穿问题(互斥锁,逻辑过期)

1、缓存击穿问题 缓存击穿问题:一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。 场景:假设线程1在查询缓存之后,本来应该去查询数据库,然后把这个数据重新加…

堆以及堆的实现

文章目录 堆的概念堆的实现HeapPushHeapPop HeapTop HeapSize HeapEmpty堆的应用 堆的概念 堆是一颗完全二叉树每个结点的值都小于子结点的值,这颗二叉树为小根堆每个结点的值都大于子结点的值,这颗二叉树为大根堆堆的定义如下:n个元素的序列…

开展庆2024年“三八”国际妇女节系列纪念活动怎样向媒体投稿?

为了向媒体投稿,庆祝2024年“三八”国际妇女节系列纪念活动,你可以遵循以下步骤: 策划与准备: 确定纪念活动的主题和目标,例如提升女性权益、表彰女性成就、促进性别平等。 策划一系列活动,如研讨会、表彰仪式、展览、讲座等,确保内容丰富多样。 准备相关的背景资料、活动介…

Linux Watchdog 机制是什么

当涉及到Linux操作系统的稳定性和可靠性时,Linux Watchdog机制是一个至关重要的议题。该机制旨在监控系统状态,确保在出现问题时采取适当的措施以维持系统的正常运行。本文将深入探讨Linux Watchdog机制的工作原理、应用范围以及如何配置和使用该机制来提…

WebGIS开发0基础必看教程:WebGIS中的要素(Feature)

1.前言 在GIS中元素一般分为点元素,线元素,面元素以及symbol元素(特殊的点元素)等。与此对应,图层可以分为点图层,线图层,面图层以及标注图层等。从第9章到第10章,我给大家讲解了什…

黑豹程序员-vue3下载时显示下载的百分比

原理 axios 有一个方法&#xff1a;onDownloadProgress&#xff0c;它可以实时返回e.loaded 已经加载的值和e.total总数&#xff0c; Math.round(e.loaded / e.total * 100) 通过计算刚好获取到已经处理的百分比。 实现代码 <template><div><button click&qu…

力扣大厂热门面试算法题 - 动态规划

爬梯子、跳跃游戏、最小路径和、杨辉三角、接雨水。每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.05 可通过leetcode所有测试用例。 目录 70. 爬楼梯 解题思路 完整代码 Python Java 55. 跳跃游戏 解题思路 完整代码 Python 代码…

kafka高水位和leader epoch

什么是高水位&#xff1f; 高水位表示分区下副本消息到哪里是算正常提交的。比如如下图&#xff1a;leader副本写到8了&#xff0c;follower副本也写到8&#xff0c;那么这个8就代表要求的副本都写入了。消息到8这里才算提交成功&#xff0c;后面的15写入了也不算提交成功&…

【Leetcode 2673】使二叉树所有路径值相等的最小代价 —— 贪心法

2673. 使二叉树所有路径值相等的最小代价 给你一个整数n表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从1到n。根节点编号为1&#xff0c;树中每个非叶子节点i都有两个孩子&#xff0c;分别是左孩子2 * i和右孩子2 * i 1。 树中每个节点都有一个值&#xff0c;用下…

Vscode C/C++ 编译问题

1.最近开始在VScode上编写程序&#xff0c;遇到了以下的坑 This may occur if the process’s executable was changed after the process wasstarted, such as when installing an update. Try re-launching the application orrestarting the machine. 2.原因 这个不是由vs…

Java开发工程师面试题(JVM)

一、JVM调优常用命令和常用参数&#xff1a; 常用命令 jps&#xff1a;查看进程及其相关的信息。jmap&#xff1a;用来生成dump文件和查看堆相关的各类信息的命令。jstat&#xff1a;查看JVM运行时的状态信息。&#xff08;如jstat -gcutil可以查看gc发生的频率和次数&#x…

技术上的判断令你如何确定现货黄金卖出时机?

要讨论现货黄金卖出时机&#xff0c;我们首先要搞清楚一个问题&#xff0c;就是开仓和平仓的问题&#xff0c;如果投资者已经成了市场中的多头&#xff0c;那他寻找的卖出时机就是要找多头平仓的时机&#xff0c;如果投资者还没开仓&#xff0c;正在寻找市场中的开仓机会&#…