Redis学习笔记(九) AOF持久化

Redis学习笔记(九) AOF持久化除了RDB持久化功能之外,Redis还提供了AOF持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。 服务

Redis学习笔记(九) AOF持久化

除了RDB持久化功能之外,Redis还提供了AOF持久化功能。与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。

Redis学习笔记(九) AOF持久化

 

服务器在启动时,可以通过载入和执行AOF文件中保存的命令来还原服务器关闭前的数据库状态。

 

AOF持久化功能的实现可以分为命令追加append、文件写入、文件同步sync三个步骤。

1、服务器在执行完一个写命令后,会议协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区末尾。

2、Redis的服务器进程是一个时间循环,这个循环中的文件事件负责接收客户端的命令请求,以及回复,而时间事件则负责执行定时运行的函数,所以服务器每次结束一个事件循环之前他都会调用flushAppendOnlyFile函数,考虑(appendfsync配置)是否将aof_buf缓冲区的内容写入和保存到AOF文件中。

appendfsync值:always(每个事件循环都要同步将aof_buf中的内容写入AOF文件)、everysec (每秒)、no(每个事件循环都要写,但是时写入系统缓冲区)

 

AOF数据还原

1、创建一个不带网络的伪客户端(redis只能在客户端中执行)

2、从APF文件中分析并读出一条写命令3、使用伪客户端执行被读出的写命令4、重复2、3步骤 直到全部处理完成。

 

AOF重写

为解决AOF文件膨胀问题,Redis创建一个新的AOF文件,两个APF文件保存的数据库状态一样,但是新的AOF文件去掉了冗余的命令。

 

AOF重写不需要读取旧的AOF文件,而是直接读取数据库中的键值,合并多次写入一个key,保存成一条写入命令。

 

AOF重写不会阻塞主进程,而是创建一个带有服务器进程的数据副本的子进程,保证在使用锁的情况下数据安全性。

 

Redis服务器设置有一个AOF重写缓冲区,这个缓冲区是在子进程创建后,Redis主进程每执行一条写命令,同时会将写命令发送到AOF缓冲区和AOF重写缓冲区,保证了AOF在重写时数据同步问题。

 

AOF重写完成后,向父进程发送信号,父进程将内容写入新的AOF文件,并改名覆盖掉原先的AOF文件,完成新旧文件的替换,在这个过成功,只有信号处理函数执行时 ,服务器进程造成阻塞,AOF后台重写不会阻塞进程。

 


 

每天学一点,总会有收获。

 

说明:尊重作者知识产权,文中内容参考《Redis设计与实现》,仅在此做学习与大家分享。


 

 

Redis学习笔记(九) AOF持久化

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8404.html

(0)
上一篇 2023-02-28
下一篇 2023-02-28

相关推荐

  • MongoDB聚合(aggregate)[通俗易懂]

    MongoDB聚合(aggregate)[通俗易懂]https://www.cnblogs.com/wt7018/p/11929359.html MongoDB聚合(aggregate) 一、基础 1、什么是聚合? 聚合是基于数据处理的聚合管道,每个文

    2023-02-13
    173
  • 利用oswalk遍历文件夹实现文件管理器功能

    利用oswalk遍历文件夹实现文件管理器功能文件管理器是我们使用电脑时常用的一个功能,它能够方便地管理我们的文件和目录。在Python中,我们可以使用os.walk函数来遍历指定目录及其子目录下的所有文件和目录,并且可以根据自己的需求对其进行分类和管理。

    2024-08-31
    26
  • MySQL默认隔离级别为什么是RR

    MySQL默认隔离级别为什么是RR曾多次听到“MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题,当前以及解决,但是MySQL的各个版本沿用了原有习惯。历史版本中的问题是什么,本次就通过简单的测试来说明一下。 1、

    2023-02-14
    142
  • Python -dev 的必备技能

    Python -dev 的必备技能Python 被广泛认为是一门易学易用的高级编程语言,但不等于它仅仅适用于入门者或小型项目,还可以创造强大的、复杂的软件,因为它拥有许多特性和库。本文将会就 Python -dev 的必备技能进行阐述以及提供相应的代码示例,包括 Python 编程技巧、流行的库和框架,以及一些其他的知识点。

    2024-04-13
    78
  • 基于Python的条件语句编程

    基于Python的条件语句编程在编程语言中,条件语句是一种普遍使用的结构,用来根据不同的条件来执行不同的代码块。Python作为一门高级语言,为程序员提供了强大且易于使用的条件语句。在本篇文章中,我们将详细介绍基于Python的条件语句编程的各个方面,帮助读者理解和掌握这一重要的编程概念。

    2024-08-06
    27
  • Python NumPy:如何计算数组的众数

    Python NumPy:如何计算数组的众数众数是统计学中的一个概念,表示在一组数据中出现频率最高的数值。

    2024-02-16
    94
  • 数据库微课版课后答案_中国微课慕课网

    数据库微课版课后答案_中国微课慕课网https://v.youku.com/v_show/id_XNDQ2MDAzOTE2MA==.html 上一期我们通过基本拆分算法,展示基本配置是什么样的。现在来介绍下 dble 其他的一些功能。…

    2022-12-25
    147
  • 伪分布式环境下启动Hadoop下的Hive[亲测有效]

    伪分布式环境下启动Hadoop下的Hive[亲测有效]在本地搭建好伪分布式环境,打开虚拟机进入linux系统,如果是在root用户下则需要切换至Hadoop用户 su – hadoop 按需输入hadoop密码 在hadoop家目录下启动Hadoop集群

    2023-03-07
    156

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注