Redis如何实现持久化(AOF、RDB、混合模式)的优缺点

news2025/1/12 8:50:07

👨‍💻个人主页: 才疏学浅的木子
🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️
📒 本文来自专栏: Redis
❤️ 支持我:👍点赞 🌹收藏 🤟关注

Redis如何实现数据不丢失

Redis的读写操作都是在内存中,所以Redis性能才会高,但是当Redis重启后,内存中的数据就会丢失,那为了保存内存中的数据不会丢失,Redis实现了数据持久化机制,会把数据保存到磁盘,这样Redis重启就能够从磁盘恢复原有的数据

Redis提供了三种数据持久化方式

AOF日志:每执行一条写操作命令就把该命令以追加的方式写入一个文件里
RDB快照:将某一时刻的内存数据以二进制的方式写入磁盘
混合持久化:集成了AOF与RDB的优点

AOF

AOF步骤
Redis在执行完一条命令后就会把该命令以追加的方式写到一个文件,然后Redis重启时,会读取该命令然后逐一执行命令的方式来进行数据恢复

在这里插入图片描述

why先执行命令后写入磁盘?

避免额外的检查开销:因为如果先将写操作记录到AOF日志中,再执行该命令的话,如果当前命令有问题如果不检查的话,Redis使用该命令进行恢复的时候就可能会出错
不会阻塞当前写操作命令的执行:因为是在当前线程的写操作之后

  • 数据可能会丢失:当前线程执行完命令而还没有写入磁盘时就宕机了
  • 可能阻塞其它操作:因为记录AOF日志也是在主线程中执行,所以当Redis把日志写入磁盘时会阻塞后续的命令

AOF的写回策略

Always:每次写操作命令都会执行完后,同步AOF日志数据写回硬盘
Everysec:每次写操作命令执行完后,先写入AOF日志缓冲区,每秒写回磁盘
No:不由Redis控制写回磁盘,每次都写入AOF日志缓冲区,再由操作系统决定何时写回磁盘

在这里插入图片描述

AOF日志文件过大怎么办?

AOF日志是一个文件,随着写命令的执行,文件会越来越大,如果文件过大就会带来性能问题,比如AOF恢复中执行的命令就会很多就会导致恢复过程很慢
所以Redis提供了AOF重写机制,当AOF文件大小超过设定的阈值时AOF就会启用重写机制来压缩AOF文件,比如set name lixiaobo 与set name lidabo 就会设置为一条指令set name lidabo

重写AOF日志过程

Redis的重写AOF过程是由后台子进程bgwriteaof来完成的,这么做的好处:

1、子进程进行AOF重写期间,主进程可以继续处理命令请求,从而避免阻塞主进程
2、子进程带有父进程的数据副本,之所以不使用多线程是因为多线程会共享内存那么修改时候就需要加锁来保证数据安全而这样就会降低性能。而使用子进程,创建子进程时候父子进程是共享内存数据,而当父子进程任意一方修改就会发生写时复制

触发重写机制后,主进程会创建重写AOF的子进程,此时子进程只会对这个内存进行只读,重写AOF子进程会读取所有指令,并逐一把内存数据的键值对转换成另一条命令,再将命令记录到重写日志(新的AOF文件)
但是重写过程中,主进程依然可以正常处理命令,所以就出现了问题,如果主进程修改了已经存在的key-value,那么就会发生写时复制,此时这个key-value数据在子进程的内存数据就与主进程的内存数据不一样了
为了解决这种数据不一致,Redis设置了一个AOF重写缓冲区,这个缓冲区在创建bgwriteaof子进程之后开始使用
在重写AOF期间,当Redis执行完一个写命令之后,它会同时把这个写命令放入AOF缓冲区与AOF重写缓冲区
也就是说在bgwriteaof期间,主进程需要执行三个工作

1、 执行客户端发来的命令
2、将执行后的命令写入AOF缓冲区
3、将执行后的命令写入AOF重写缓冲区

当子进程重写完成之后会向主进程发送一条信号,信号是进程间通信的一种方式
主进程收到该信号后,会调用一个信号处理函数

1、将AOF重写缓冲区中的所有内容追加到新的AOF文件中,使得新旧两个AOF所保存的数据一致
2、新的AOF的文件进行改名,覆盖现有的AOF文件

在这里插入图片描述

RDB

RDB记录的是某一个瞬间的内存数据,记录的是实际数据,因此在数据恢复时,RDB恢复数据的效率比AOF高些

如何进行RDB

redis提供了两个命令来执行RDB

save:执行save会在主线程生成RDB文件,所以会阻塞主线程
bgsave:创建一个子进程来生成RDB文件,避免阻塞主线程

Redis的快照是全量快照,也就是每次执行快照都会把内存中的数据都记录到磁盘,所以这是一个比较重的操作

RDB执行快照时候数据能修改?

可以修改,在执行bgsave过程,Redis依旧可以继续处理操作命令,也就是数据是能被修改,关键技术还是写时复制

混合持久化

混合持久化步骤

AOF的优点是丢失数据少,但是数据恢复慢,而RDB是优点是恢复速度快而快照的频率不好把握,如果频率过低,数据丢失的量就比较多,如果频率高就会影响性能
所以退出了混合持久化集成两者优点,在AOF重写日志时,fork出来的子进程会把当前主线程共享的内存数据以RDB方式写入到AOF文件,然后主线程处理的命令被记录到重写缓冲区中,重写缓冲区中的命令会以追加AOF的形式存在AOF日志中

在这里插入图片描述

混合持久化的优缺点
优点
集成了AOF与RDB的优点
缺点
文件可读性变差

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

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

相关文章

OpenStackds集群部署(一)

一、OpenStack简介 Openstack体系架构 1. Openstack服务之间的关系 2.体系架构 3. 硬件要求 4. 网络架构 1.1 什么是OpenStack OpenStack是把一堆计算机资源和一堆存储服务器放到世界上不同的地方,然后通过这个OpenStack提供的不同服务程序连接起来&#xff0…

Linux(基于Centos7)(二)

文章目录一、任务介绍二、任务实施三、任务扩展一、任务介绍 Linux服务器配置与管理(基于Centos7.2)任务目标(一) 实施该工单的任务目标如下: 知识目标 1、熟悉Linux文件权限的表示方法。 2、了解改变文件权限的两种…

使用内存技术实现 HTAP 的可行性

万籁 “俱寂” 时,一家知名 IT 研究与顾问咨询机构的发声,给关系型数据库这个平静的池塘丢了颗巨石:2014 年,Gartner 正式提出了 HTAP 这个概念。 Gartner’s definition in 2014: utilizes in-memory computing technologies to …

查阅必备----常用的SQL语句,配语句和图解超详细,不怕你忘记

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 **收录于专栏 数据库 ⭐查阅必备–常用的SQL语句⭐ 文章目录⭐查阅必备--常用的SQL语句⭐一,关键语句大全&am…

驱动——设备树属性获取相关实验

完成设备树属性获取相关实验 通过键名获取数值相关API获取设备树属性 1、要获取的属性如下所示&#xff1a; /*mynode0x12345678{ compatible "hqyj,mynode";//字符串 astring"hello 22071";//字符串 uint <0xaabbccdd 0x11223344>;//32位无符号…

SpringBoot SpringBoot 开发实用篇 6 监控 6.5 health 端点指标控制

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.5 health 端点指标控制6.5.1 问题引入6.5.2 health 端点指标…

十二、虚拟 DOM 和 render() 函数(1)

本章概要 虚拟DOMrender()函数 Vue.js 之所以执行性能高&#xff0c;一个很重要的原因就是它的虚拟 DOM 机制。 12.1 虚拟 DOM 浏览器在解析 HTML 文档时&#xff0c;会将文档中的元素、注释、文本等标记按照它们的层级关系组织成一棵树&#xff0c;这就是熟知的 DOM 树。元…

MCE | LYTAC 与靶向蛋白降解技术

靶向蛋白降解 (TPD) 是一种有效性的&#xff0c;高度选择性的诱发蛋白降解方式。近年来&#xff0c;以 PROTAC 为代表的 TPD 技术的研究如火如荼。PROTAC 主要降解的是胞内蛋白&#xff0c;实际上&#xff0c;有 40% 的基因产物为胞外和膜相关蛋白&#xff0c;如生长因子、细胞…

一种新的数据聚类启发式优化方法——黑洞算法(基于Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【学习QT必备的C++基础】C++类和对象

文章目录C类的定义和对象的创建详解类的定义创建对象访问类的成员使用对象[指针](http://c.biancheng.net/c/80/)总结C类的成员变量和成员函数详解在类体中和类体外定义成员函数的区别C类成员的访问权限以及类的封装简单地谈类的封装对private和public的更多说明C对象的内存模型…

异构网络小入

A Survey of Heterogeneous Information Network Analysis Heterogeneous Graph Attention Network 异构网络很火吗&#xff1f; 在一个网络中&#xff0c;不用节点的类型不同&#xff0c;这是肯定的。 所以&#xff0c;异构网络在表征比较复杂的情形时&#xff0c;是比较合适…

低代码引擎半岁啦,来跟大家唠唠嗑...

作者&#xff1a;刘菊萍(絮黎) 之前低代码引擎一直是在阿里集团内部进行孵化的&#xff0c;对外开源算是一次新生。从2022年3月23日开源至今&#xff0c;我们的低代码引擎已经半岁了&#xff0c;希望借这个机会来跟大家唠唠嗑。 开源地址&#xff1a;https://github.com/aliba…

WeOps上新|V3.12版本提升网络设备的自动化能力

本次WeOpsV3.12版本更新主题总结为&#xff1a; 持续补充自动发现能力&#xff0c;覆盖网络设备和数据库扩充自动化运维&#xff0c;支持网络设备脚本工具内置AD账号自动化流程&#xff0c;支持AD账号创建/密码重置/删除增加监控告警移动端&#xff0c;覆盖更多场景优化凭据管…

WebDAV之葫芦儿·派盘+人生Life

人生Life 支持webdav方式连接葫芦儿派盘。 自己经常容易忘记的情,后来便记录在便签中,以作提醒和备忘;但是到了时间还是会因时间安排不妥冲突而无法完成,拖拖拉拉、还是很乱,总是会忘记会议、想不起重要的行程,非常烦恼;直到体验了人生Life这几款日程、待办事情的APP后…

WordPress图片自动添加alt标签和title的两种方法(插件or代码)实例

使用WordPress家长朋友知道&#xff0c;上传图片的时候是不会自动添加alt标签的&#xff0c;从seo和用户体验来看&#xff0c;图片加alt标签还是非常非常重要的。 WordPress自动给图片添加alt标签和title的两种方法&#xff08;插件or代码&#xff09;实例Alt信息&#xff1a; …

MemArts :高效解决存算分离架构中数据访问的组件

摘要&#xff1a;计算侧需要一个高速的缓存层来消除计算集群和OBS之间的数据访问鸿沟。为了解决这个问题&#xff0c;提出MemArts CC分布式客户端缓存。本文分享自华为云社区《华为云全新缓存生态组件MemArts》&#xff0c;作者&#xff1a; MichaelYun。 公有云的基础设施都是…

piwigo搭建在线网络相册,并随时随地访问

作为一个打工人&#xff0c;我们所在的城市总与父母相隔甚远&#xff0c;而成家立业后&#xff0c;孩子又成所有人的羁绊&#xff0c;有的孩子在自己身边&#xff0c;引得远方父母思念挂牵&#xff0c;时时刻刻与父母视频通话很不现实&#xff0c;老人也没法和自己的老伙伴们分…

酒店管理系统

登录模块设计 &#xff08;1&#xff09;在登录界面&#xff0c;包含用户名&#xff0c;密码信息&#xff0c;输入之后点击登录进入酒店管理系统。 &#xff08;2&#xff09;用户名和密码都不能为空&#xff0c;否则会弹出对话框进行提醒。 &#xff08;3&#xff09;后端也会…

口碑最好的运动蓝牙耳机推荐,2022年最值得入手的六款运动耳机

说到耳机&#xff0c;绝大多数人都在使用&#xff0c;对于运动爱好者就更不用多说&#xff0c;运动耳机随身携带着&#xff0c;跑道哪&#xff0c;戴到哪。随着耳机越来越多样化&#xff0c;各种耳机层出不穷&#xff0c;大家都难挑选&#xff0c;不知道怎么找&#xff0c;一副…

Aspose.PDF for .NET 22.11.0 Crack

Aspose.PDF for .NET 是一个本地库&#xff0c;使开发人员能够将 PDF 处理功能添加到他们的应用程序中。API 可用于构建任何类型的 32 位和 64 位应用程序&#xff0c;以在不使用 Adob​​e Acrobat 的情况下生成或读取、转换和操作 PDF 文件。 Aspose.PDF for .NET API 允许执…