redis设计原理009持久化策略

news2024/12/22 19:10:41

目录

RDB

备份原理

优点

缺点

AOF

不能保证绝对不丢失数据

重写

    流程

    结论

优点

缺点

如何选择RDB和AOF

同时开启

混合模式

运行过程

数据

数据恢复

优点

缺点

优化方案

总结


RDB


通过快照snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘

RDB是Redis默认采用的持久化方式

在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存里。

备份原理


Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效

优点


  1.   紧凑压缩的二进制文件 节省空间
  2.   fork子进程性能最大化
  3.   启动效率高 恢复速度快

缺点


  1.   一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据
  2.   虽然Redisfork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能
  3.   fork过程非常耗时,会造成毫秒级不能响应客户端请求

AOF


写一条,保存一条,历史的状态

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录)只许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

不能保证绝对不丢失数据


  执行系统调用write函数,将一些内容写入到某个文件里面时,为了提高效率,系统通常不会直接将内容写入硬盘里面,而是先将内容放入一个内存缓冲区(buffer)里面,等到缓冲区被填满,或者用户执行fsync调用和fdatasync调用时才将储存在缓冲区里的内容真正的写入到硬盘里,未写入磁盘之前,数据可能会丢失

重写


       原因


  比如我有业务很简单,就来回delete set同一个key。就这个业务运行了10年,那么aof文件将记录无数个delete k上,set   k1x。其实都是重复的,但是我aof每次都追加,文件变成了1T大小。这时候Redis宕机了,要恢复,你想想1TB大小的aof文去恢复,累死了。最主要的是1TB大小只记录了两个命令,所以压缩其实就是来处理这件事的

    流程


  1. Redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行rewrite。即Redisappend模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行
  2. 因为Redis在创建新AOF文件的过程中,会继续将命令追加到现有的AOF文件里面,即使重写过程中发生停机,现有的AOF文件也不会丢失。
  3. 而一旦新AOF文件创建完毕,Redis就会从旧AQF文件切换到新AOF文件,并开始对新AOF文件进行追加操作

    结论


合并重复的操作,AOF会使用尽可能少的命令来记录

优点


  1.   备份机制更稳健,丢失数据概率更低。
  2.   可读的日志文本,通过操作AOF稳健,可以处理误操作

缺点


  1.   比起RDB占用更多的空间
  2.   恢复备份速度慢
  3.   每次读写都同步的话,有一定的性能压力
  4.   存在一个别的Bug,造成恢复不能

如何选择RDB和AOF


同时开启


  1. Redis先加载AOF文件来恢复原始数据,因为AOF数据比RDB地更完整,但是aof存在潜在的bug,如把错误的操作记录写入了aof,会导出数据恢复失败,所以可以把RDB作为后备数据。
  2. 为了考虑性能,可以只在Slave上开启RDB,并且15min备份一次,如果为了避免AOF rewite的Io以及阻塞,可以在Redis集群中不开启AOF,靠集群的备份机制来保证可用性,在启动时选取较新的RDB文件,如果集群全部崩溃,会丢失15mi前的数据。

混合模式


        Redis4.0开始支持该模式

        解决的问题:Redis在重启时通常是加载AOF文件,但加载速度慢。因为RDB数据不完整,所以加载AOF

        开启后,AOF在重写时会直接读取RDB中的内容。

运行过程


  通过bgwriteaof完成,不同的是当开启混合持久化后

  1. 子进程会把内存中的数据以RDB的方式写入aof中
  2. 把重写缓冲区中的增量命令以AOF方式写入到文件
  3. 将含有RDB个数和AOF格数的AOF数据覆盖旧的AOF文件

数据

        新的AOF文件中,一部分数据来自RDB文件,一部分来自Redisi运行过程时的增量数据

数据恢复

  当我们开启了混合持久化时,启动Redis依然优先加载aof文件,aof文件加载可能有两种情况如下:

  1. aof文件开头是rdb地的格式,先加载rdb地内容再加载剩余的aof
  2. aof文件开头不是rdb的格式,直接以aof格式加载整个文件

优点

        既能快速备份又能避免大量数据丢失

缺点

        RDB是压缩格式,AOF在读取它时可读性较差

优化方案


  1. 独立部署,硬盘优化
  2. 缓存禁用持久化
  3. 主从模式,从持久化
  4. 优化fork处理

总结


  1. 官方推荐量都启用
  2. 如果对数据不敏感,可以选单独用RDB.
  3. 不建议独用,因为可能会出Bug.
  4. 如果只是做纯内存缓存,可以都不用

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

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

相关文章

写一个python文件,在shell脚本中运行

最近要复现论文了,发现代码的主函数在.py文件中,运行脚本是在.sh中。 要命的事,我不懂,我怎么debug。 1.新建一个pycharm项目,新建main.py import argparsedef get_args():parser argparse.ArgumentParser()parser…

chatgpt赋能python:Python模块的优势和局限性

Python模块的优势和局限性 引言 Python作为一门高级编程语言,被广泛应用于各种领域。其中,Python内置的模块系统,为Python在编程中的灵活性和可扩展性提供了很大的优势。在本文中,我们将探讨Python模块的优势和局限性及其对Web优…

chatgpt赋能python:用Python剔除重复内容提升SEO效果

用Python剔除重复内容提升SEO效果 SEO是指通过优化网站结构和内容,在搜索引擎中获得更高的排名,从而提升网站流量和曝光度的一种网络营销方式。网站内容是SEO工作的重要组成部分,而剔除重复的内容对于SEO效果的提升有着重要的作用。本文将介…

chatgpt赋能python:Python制作人机交互界面:完美融合技术和用户体验

Python 制作人机交互界面:完美融合技术和用户体验 随着人工智能和互联网技术的发展,人机交互一直是非常热门的话题。Python 作为一门功能强大,应用广泛的高级编程语言,同样在这个领域发挥了重要作用。Python 制作人机交互界面&am…

【列表迭代器和增强for循环】

列表迭代器和增强for循环 1.列表迭代器 ListIterator:列表迭代器 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器…

SAP ABAP smartforms 创建并实现调用源码(下)

SAP ABAP smartforms 创建并实现调用源码(上) smartforms 入门详见上一篇博文。 一:报表程序调用 smartforms 示例:报表选中一行,将这行机相关数据通过表单打印出来。实际例子:采购订单表,销售订单。 调…

低代码平台iVX

一、ivx是啥 编写复杂的代码仍然是一项具有挑战性的任务。然而,现在有一种令人振奋的解决方案出现了——iVX,这是一种创新的可视化编程语言,为每个人提供快速掌握的能力。 iVX 是一个 “零代码” 的可视化编程语言,“零代码” 是…

基于flask的web应用开发——认识@app.route

目录 0. 前言1. flask简介2. 编写你的第一个网页3. 运行效果查看4. 本节小结 0. 前言 本专栏以基于flask实现web前端,即制作一个自己的网页 本节学习路由装饰器app.route() 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 …

chatgpt赋能python:Python加R:让数据科学更加高效

Python加R:让数据科学更加高效 在过去的几年里,Python和R成为数据科学领域中最受欢迎的编程语言。它们提供了丰富的库和工具,帮助从事数据分析和机器学习的人们更加高效地完成任务。然而,Python和R都有其各自的优缺点。 Python的…

代理IP基础、实际运用,以及如何获取

代理IP是指通过一个中间服务器来转发用户的网络请求,从而在网络上隐藏用户的真实IP地址,或者绕过网络限制以达到访问特定内容的目的。下面是代理IP的一些基础知识: 1、代理IP的分类:代理IP可以分为普匿代理IP、透明代理IP和高匿代…

互联网医院牌照申请的资料以及流程

随着互联网的发展,互联网医院逐渐成为一个热门话题,越来越多的医疗机构开始尝试在互联网上提供医疗服务。然而,想要在互联网上开展医疗服务,必须获得互联网医院牌照。本文将介绍互联网医院牌照申请需要的资料、条件,以…

算法提高-搜索-DFS之剪枝与优化

DFS之剪枝与优化 DFS之剪枝与优化AcWing 165. 小猫爬山AcWing 166. 数独AcWing 167. 木棒AcWing 168. 生日蛋糕 DFS之剪枝与优化 AcWing 165. 小猫爬山 DFS的五种剪枝方法 (1)优化搜索顺序 (2)排除等效冗余 (3&#…

chatgpt赋能python:Python删除目录:如何在项目中正确删除文件夹?

Python 删除目录:如何在项目中正确删除文件夹? 在使用Python语言进行程序开发的过程中,可能会需要删除不再需要的目录,例如缓存和日志文件夹。然而,删除目录需要小心谨慎,避免误删除重要文件或目录。在本文…

chatgpt赋能python:Python列表自动排序

Python列表自动排序 Python是一种流行的编程语言,它有很多有用的内置函数和数据结构。其中一个最常用的数据结构是列表。在Python中,列表是一个有序的集合,可以存储多种类型的元素。列表不仅仅是一个数据结构,它还有一些有用的方…

Flink standalone 集群会话模式部署搭建

环境准备 1、Centos7集群环境搭建 2、flink-1.17.0-bin-scala_2.12.tgz 安装包,下载地址 规划 服务器角色iphadoop01JobManager TaskManager192.168.140.132hadoop02TaskManager192.168.140.133hadoop03TaskManager192.168.140.134 安装 1、下载 flink-1.17.0-…

【Unity3D】边缘检测特效

1 边缘检测原理 边缘检测的原理是:检测每个像素周围的像素亮度差,如果亮度差异较大,就将该像素识别为边缘,并进行边缘着色。 使用过卷积神经网络(CNN)的读者,一定知道卷积运算,笔者之…

储能基础知识【一】

储能基础知识【一】 1、基础名词、概念、对应的英文单词、系统组成2、储能电池系统组成图3、性能指标 1、基础名词、概念、对应的英文单词、系统组成 电池储能系统(Battery Energy Storage System, BESS);电芯(Battery Cell&…

总结887

学习目标: 周目标:强化强3讲,英语背3篇文章并回诵,检测,一套数学模拟题 每日必复习(5分钟) 复习第四讲方程组 学习内容: 暴力英语:背诵《happiness is a journey》每日…

《HTTPS协议原理》

【一】https协议是啥子? https也是一个应用层协议,实在http协议的基础上,引入了一个加密层,http协议的内容都是按照文本的方式进行明文传输的, 这就导致了在传输的过程中出现一些被篡改的情况。 【二】啥是加密&…

操作系统复习3.1.0-内存

内存 程序是由内存放到CPU才可处理,前面一直有提到外存、内存,外存I/O速度十分慢,而内存I/O速度快,CPU I/O速度也快。 因此内存是缓和外存和CPU间I/O速率差异问题 为区分并发环境下程序数据存放地方,就给内存的存储单…