redis小知识

AOF与RDB的区别

     AOF (Append Only File) 和 RDB (Redis Database) 都是Redis中的持久化机制,但有以下几点不同之处:

  1. 内容格式:AOF 以日志的形式记录所有写操作命令,而 RDB 则是在指定的时间间隔内对数据库进行快照,将数据保存到一个二进制文件中。

  2. 文件大小:AOF 文件通常会比 RDB 文件大,因为它记录了所有写操作命令,而 RDB 文件只是数据的快照。

  3. 恢复速度:AOF 在恢复数据时需要重新执行所有写操作命令,而 RDB 只需要将数据从文件加载到内存中。因此,RDB 的恢复速度通常比 AOF 快,特别是当数据库较大时。

  4. 可读性:AOF 文件以文本形式存储命令,因此可读性较好,可以直接查看和修改。而 RDB 是以二进制格式存储的,不易读取和编辑。

  5. 容灾性:AOF 采用追加写入方式,实时记录数据操作,因此更可靠,数据丢失的风险较低。而 RDB 是定时保存数据库快照,如果在保存之前发生故障,可能会有数据丢失。

        AOF 适用于需要最小化数据丢失风险的场景,而 RDB 适用于需要较快的数据恢复速度和较小的文件大小的场景。在实际应用中,可以根据具体需求选择使用哪种持久化机制,也可以同时使用两种方式,以实现更好的容灾性能和性能优化。

AOF持久化

      AOF持久化是一种将数据持久化到磁盘的方式,通过记录操作日志的方式将数据的修改操作记录下来,当需要恢复数据时,只需要重新执行这些操作即可。

     AOF持久化解决了数据持久化的实时性问题,主流的解决方案是通过将操作指令写入到AOF文件中,实现数据的实时同步。当客户端发送指令时,指令并不会立即执行,而是先存入缓冲区,生成一个AOF文件。当AOF文件的大小达到一定阶段或者间隔一定时间后,系统会将缓冲区中的指令同步到AOF文件中。

在AOF写数据的过程中,可以通过appendfsync参数来设定同步策略。有三种策略可选择:

  1. always:每次指令都会同步进AOF文件,保证数据的完整性和准确性,但由于需要频繁的磁盘写入,效率较低。

  2. everysec:每秒钟会将缓冲区中的指令同步一次到AOF文件中。虽然会导致一秒钟的数据丢失,但是在大部分场景下仍然可以接受,并且能够提供较好的性能。

  3. no:由操作系统控制同步策略,整体不可控。这种策略下可能会存在数据丢失的风险,不推荐在生产环境中使用。

可以通过设置appendonly参数的值为yes来开启AOF持久化配置,默认情况下是关闭的。同时,可以通过设置appendfsync参数的值来选择适合业务需求的同步策略。

AOF工作原理

         AOF (Append-Only File) 是Redis持久化机制之一,它记录了所有写操作的日志,以文件追加的方式保存在磁盘上。AOF工作原理和eveysec开启重写的流程如下所述:

  1. 执行set指令:当执行一个写操作时,Redis会将这个操作以命令的形式追加到AOF文件的末尾。这个操作会被主进程处理。

  2. 开启子进程:在执行set指令时,主进程会fork出一个子进程来处理重写操作。

  3. 缓存区:在执行set指令时,Redis同时会开辟一个AOF重写的缓冲区,用于向重写子进程提供数据。重写子进程会从缓冲区中读取数据。

  4. 执行bgrewriteaof指令:通过执行bgrewriteaof指令,主进程开始进行AOF重写。

  5. 重写子进程:在执行bgrewriteaof指令后,主进程会fork出另一个子进程来执行AOF重写操作。这个子进程会发送一条提示信息表示正在执行AOF重写操作。

  6. 创建重写后的AOF文件:重写子进程会遍历整个数据库,将所有的操作以命令的形式写入一个临时文件中。

  7. AOF文件替换:当重写子进程完成重写操作后,它会将临时文件重命名为新的AOF文件,并将新文件路径发送给主进程。

  8. 替换AOF文件:主进程接收到新的AOF文件路径后,将原来的AOF文件替换为新文件。这样,AOF重写操作就完成了。

      AOF重写操作的目的是为了解决AOF文件过大的问题。随着时间的推移,AOF文件会越来越大,影响Redis的加载性能。通过AOF重写机制,可以将AOF文件压缩成更小的尺寸,同时保留了与原文件等效的数据。

     

AOF写数据遇到的问题 

      AOF写数据遇到的问题:

  • 同一个key设置多次:如果同一个key被设置多次,前几次的设置可能是无效的数据,不需要执行,只需要保留最终的设置。
  • 重写:为了提高AOF的持久化效率、数据恢复效率和磁盘利用率,需要进行AOF重写操作,将AOF文件中的冗余指令去除,只保留最终数据的写入命令。
  • 作用:提高持久化效率、数据恢复效率和磁盘利用率。

AOF写数据的规则:

  • 进程内超时的数据不写入AOF文件:当数据达到超时时间后,如果还没有被修改,就不需要再写入AOF文件。
  • 忽略无效指令,只保留最终数据的写入命令:对于同一个key的多次写入指令,只需要保留最后一次的写入指令,前面的写入指令可以忽略。
  • 对同一数据的多条写入命令,合并为一条:多条写入同一数据的指令可以合并为一条,减少写入AOF文件的指令数量。

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

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

相关文章

WDW-100G 高温拉力试验机 技术方案书

一、整机外观图: 二、项目简介: 微机控制高温拉力试验机是电子技术与机械传动相结合的新型材料试验机,它具有宽广准确的加载速度和测力范围,对载荷、变形、位移的测量和控制有较高的精度和灵敏度,还可以进行等速加载、…

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大…

CDLinux下载网站

CDlinux - Browse /CDlinux-ISO at SourceForge.net

用神经网络预测三角形的面积

周末遛狗时,我想起一个老问题:神经网络能预测三角形的面积吗? 神经网络非常擅长分类,例如根据花瓣长度和宽度以及萼片长度和宽度预测鸢尾花的种类(setosa、versicolor 或 virginica)。神经网络还擅长一些回…

2024中青杯A题数学建模成品文章数据代码分享

人工智能视域下养老辅助系统的构建 摘要 随着全球人口老龄化的加剧,养老问题已经成为一个世界性的社会问题,对社会各个方面产生了深远影响,包括劳动力市场、医疗保健和养老金制度等。人口结构变化对养老服务的质量和覆盖面提出了更高要求。特…

ARP基本原理

相关概念 ARP报文 ARP报文分为ARP请求报文和ARP应答报文,报文格式如图1所示。 图1 ARP报文格式 Ethernet Address of destination(0–31)和Ethernet Address of destination(32–47)分别表示Ethernet Address of dest…

【算法】前缀和——除自身以外数组的乘积

本节博客是用前缀和算法求解“除自身以外数组的乘积”,有需要借鉴即可。 目录 1.题目2.前缀和算法3.变量求解4.总结 1.题目 题目链接:LINK 2.前缀和算法 1.创建两个数组 第一个数组第i位置表示原数组[0,i-1]之积第二个数组第i位置表示原数组[i1,n-1]…

Hadoop 客户端 FileSystem加载过程

如何使用hadoop客户端 public class testCreate {public static void main(String[] args) throws IOException {System.setProperty("HADOOP_USER_NAME", "hdfs");String pathStr "/home/hdp/shanshajia";Path path new Path(pathStr);Confi…

在DAYU200上实现OpenHarmony跳转拨号界面

一、简介 日常生活中,打电话是最常见的交流方式之一,那么如何在OpenAtom OpenHarmony(简称“OpenHarmony”)中进行电话服务相关的开发呢?今天我们可以一起来了解一下如何通过电话服务系统支持的API实现拨打电话的功能…

C#-根据日志等级进行日志的过滤输出

文章速览 概要具体实施创建Log系统动态修改日志等级 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 概要 方便后期对软件进行维护,需要在一些关键处添加log日志输出,但时间长…

【408精华知识】指令周期的数据流

文章目录 一、取指周期二、间址周期三、执行周期(一)数据传送类指令(mov/load/store)(二)运算类指令(加/减/乘/除/移位/与/或)(三)转移类指令(jmp/jxxx) 四、中断周期 CPU每取出并且执行一条指令所需要的全…

二叉数之插入操作

首先是题目 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,可能存在多种有效…

AcWing 217:绿豆蛙的归宿 ← 搜索算法

【题目来源】https://www.acwing.com/problem/content/219/【题目描述】 给出一个有向无环的连通图,起点为 1,终点为 N,每条边都有一个长度。 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点。 绿豆蛙从起…

Kreon: An Efficient Memory-Mapped Key-Value Store for Flash Storage——论文泛读

TOS 2021 Paper 论文阅读笔记整理 问题 持久的键值存储已经成为现代数据处理系统的数据访问路径中的一个主要组件。然而,它们表现出较高的CPU和I/O开销。 基于LSM Tree的键值存储中两个重要的CPU和I/O开销来源是: 在LSM Tree中使用压缩,不…

若依解决使用https上传文件返回http路径问题

若依通过HTTPS请求进行文件上传时却返回HTTP的文件链接地址,主要原因是使用了 request.getRequestURL 获取链接地址。 解决办法: 在nginx配置文件location处加上:proxy_set_header X-Forwarded-Scheme $scheme; 然后代码通过request.getHea…

MobaXterm下载虚拟机SSH链接超时解决(保姆级踩坑)

文章目录 为啥要用MobaXtermMobaXterm下载打开虚拟机ssh链接ssh连接失败排查linux配置windows配置 到这了,什么都干了,怎么还不成功? 更多相关内容可查看 在一个阳光明媚的下午,开启了无限踩坑的旅程 为啥要用MobaXterm 作为小编…

DockerNetwork

Docker Network Docker Network 是 Docker 引擎提供的一种功能,用于管理 Docker 容器之间以及容器与外部网络之间的网络通信。它允许用户定义和配置容器的网络环境,以便容器之间可以相互通信,并与外部网络进行连接。 Docker Network 提供了以…

【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解

和平面识别框架一样 1为XR Origin添加AR Point Cloud Manager组件 然后你的ar应用就具备了点云识别功能,就这么简单 2.可视化这些云点 创建一个美术效果的预制体,人家提供了预设模板 然后拖到仓库(ASSETS)创建预制体&#xff…

满足a==1a==2

网上看到的一道JS面试题,觉得很有意思 觉得很有意思的原因是,这个式子乍看之下是有些反常识的。“a1&&a2”,它的意思似乎是“a在等于1的同时又等于2”,这时我们的第一反应可能就是不成立,一个变量怎么可能同时…

前端 MVC 分层的实践

目录 前言 并未过时的 MVC MVC 的由来 不同版本的 MVC 苹果版本 微软版本 阮一峰版 原生 JS 实现 MVC Model View Controller React 中的 MVC 其他分层 Service format utils 目录 总结 前言 前面我们讲了 JavaScript 面向对象编程,这篇文章我们会…