Redis的RDB文件与AOF文件

本笔记参考《Redis设计与实现》 P118 ~ P150

RDB文件

1、RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据
2、SAVE命令由服务器进程直接执行保存操作,该命令会阻塞服务器
3、BGSAVE命令由子进程执行保存操作,不会阻塞服务器
注意此时服务器的状态:在处理BGSAVE命令时,服务器处理SAVEBGSAVEBGREWRITEAOF三个命令方式与平时不同。

  • 客户端发送的SAVE命令会被服务器拒绝,服务器禁止SAVE命令与BGSAVE同时执行,是为了避免父进程与子进程同时执行rdbSave调用,产生竞争条件。
  • 客户端发送的BGSAVE命令也会被服务器拒绝,因为同时执行两个BGSAVE也会产生竞争条件。
  • 最后:BGSAVEBGREWRITEAOF不能同时执行:因为两个命令实际工作都是由子进程执行,所以两个命令在操作方面没有冲突,但是并发出两个子进程,并且两个子进程都是同时执行大量的磁盘写入操作的话不是个好主意。

4、服务器状态中会保存所有用save选项设置的保存条件,当任意一个保存条件被满足,服务器自动执行BGSAVE
5、RDB文件时一个经过压缩的二进制文件,由多个部分组成
6、对于不同类型的键值对,RDB文件会使用不同方式保存

AOF文件

1、APF文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态
2、AOF文件中的所有命令都是以Redis命令请求协议的格式保存的
3、命令请求会先保存到AOF缓冲区中,之后再定期写入并同步到AOF文件
4、appendfsync选项的不同值对于AOF持久化功能的安全性以及Redis服务器的性能有很大影响

  • appendfsync的值为always时,服务器在每个事件循环都要将aof_buf缓冲区中的所有内容写到AOF文件中,并且同步AOF文件,所以always的效率最慢,但安全性最强,出现故障,AOF持久化也只会丢失一个事件循环中所产生的命令数据
  • appendfsync的值为everysec时,服务器在每个事件循环都要将aof_buf缓冲区中的所有内容写入到AOF文件,并且每隔一秒就要在子线程中对AOF文件进行一次同步。效率足够快,出现故障也只会丢失一秒钟的命令数据
  • appendfsync的值为no时,服务器在每个事件循环都要将aof_buf缓冲区中的所有内容写入到AOF文件中,何是同步由操作系统控制。该模式下的AOF文件写入速度最快,因为缓存了足够多的数据,但是出现故障会丢失上次同步AOF之后的所有写命令数据

5、服务器只要载入并重新执行保存在AOF文件中的命令,就可以还原数据库本来的状态(通过创建一个不带网络连接的伪客户端)
6、AOF重写可以产生一个新的AOF文件,新文件与原有文件所保存的数据库状态一样,但是体积更小
7、AOF重写的功能时通过读取数据库中的键值对来实现的,程序无须对现有AOF文件进行任何读入、分析或者写入操作
8、执行BGREWRITEAOF命令时,Redis服务器会维护一个AOF重写缓冲区,该缓冲区会在子进程创建新AOF文件期间,记录服务器执行的所有写命令。当子进程完成创建新AOF文件的工作之后,服务器会将重写缓冲区中的所有内容追加到新AOF文件的末尾,使得新旧两个AOF文件所保存的数据库状态一致。最后,服务器用新的AOF文件替换掉旧AOF文件,完成文件重写操作

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

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

相关文章

eclipse扩容

eclipse扩容 -vmD:/jdk-6u17-windows-i586/jdk1.6.0_17/bin/javaw.exe-startupplugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar-nlen_US--launcher.libraryplugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.200.v20120913-144807-productorg.eclipse…

node oauth2验证_如何设置和使用护照OAuth Facebook身份验证(第2部分)| Node.js

node oauth2验证In my last article (How to set up and use passport OAuth Facebook Authentication (Section 1) | Node.js), we looked at another form of authentication called the OAuth authentication which involves sign in or signup using social media. 在我的上…

Python and Microsoft Word

国外网站看到的文章:Accessing Microsoft Word with Python follows the same syntax that we used for Excel. Let’s take a quick look at how to access Word.from time import sleep import win32com.client as win32RANGE range(3, 8)def word():word win32…

东哥读书小记 之 《一个广告人的自白》

掰着指头一算,端午假期确实完成不少事情,过的太尼玛充实鸟:去健身房2小时,且老夫的平板支撑终于能坚持超过1分钟,普大喜奔有木有;给合租的室友买蛋糕过了个生日;去 去哪儿 参加W3ctech的技术交流…

Redis的文件事件与时间事件处理

目录文件事件处理事件类型客户端和服务端的通信过程时间事件处理执行器执行周期性事件作用事件的调度与执行文件事件处理 Redis基于Reactor模式开发了文件事件处理器。文件事件处理器以单线程方式运行,通过IO多路复用程序监听多个套接字,实现了高性能网…

fisher-yates_使用Fisher-Yates随机播放算法以O(n)时间随机播放给定数组

fisher-yatesExample: 例: Say the input array is [1, 2 3, 4, 5 6, 7]After reshuffling it can be anything like[4, 3, 7, 2, 1, 5, 1]Our goal is that the reshuffling should be as random as possible. 我们的目标是,改组应尽可能地随机。 The…

[分享]一些在 WPF/Silverlight 中应用 MVVM 模式时可能会有点用途的代码

想来这个博客也已经有很久没更新过了,新年新气象,现在就开始写新内容吧。 最初的起因 在最近的几个月中我做的开发总是要跟 XAML 打交道,也就是 WPF 啊,Silverlight 啊,WF 啊这些。 在进行 WPF 和 Silverlight 开发的…

手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。...

1、拍照裁剪后 点击EditText会弹出输入法,却不能输入。可是点击点一EdtiText就能够输入了,所以我就写了一个看不见的EdtiText,切换焦点,这样就攻克了这个奇怪的这问题,应该是android内部的问题。 这是网络一个牛人留下…

Redis一个命令请求从发送到完成的步骤以及初始化服务器步骤

一个命令请求从发送到完成的步骤 如下: 1、客户端将命令请求发送给服务器 当用户在客户端中键入一个命令请求时,客户端会将这个命令请求转换成协议格式,然后通过连接到服务器的套接字,将协议格式的命令请求发送给服务器。 2、服…

c打印行号和函数_使用C中的函数名称,行号从任何函数打印错误消息

c打印行号和函数Sometimes, it is necessary to print some message on logic failure or anytime with the function name and line number, so that program can be debugged and fixed the issue. 有时,有必要在逻辑故障时或在任何时候使用功能名称和行​​号打印…

Linux SPI框架

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7733476 Linux的SPI子系统采用主机驱动和外设驱动分离的思想,首先主机SPI控制器是一种平台设备,因此它以platform的方式注册进内…

dbms标识符无效_DBMS中的嵌套查询,相关的嵌套查询和集合比较运算符

dbms标识符无效嵌套查询 (Nested Queries) A query embedded in a query. This type of relation is termed as Nested Query and the Embedded Query is termed as a subquery. 查询中嵌入的查询。 这种类型的关系称为嵌套查询,而嵌入式查询称为子查询。 For exam…

重构——解决过长参数列表(long parameter list)

目录1、Replace Param with Query2、Preserve Whole Object3、Introduce Param Object4、Remove Flag Argument5、Combine Functions into ClassReference当我们需要在超长函数中提炼子函数时,如果函数内有大量的参数和临时变量,这将会对函数的提炼形成很…

C# 点点滴滴: out和ref

用c#很长一段时间了,不过基本是啥都不会,当C用的,作为写单片机的,还是真心觉得C比较亲切,呵呵。 不过总是要进步啊,慢慢积累呗,这次是写一个CAN的上位机模板出来,以后的项目就要彻底…

css控制图片最宽 最高值

.content img{width:expression_r(this.width > 500 && this.height < this.width ? 500:true);max-width:500px;height:expression_r(this.height >500 ? 500:true);max-height:500px; }转载于:https://www.cnblogs.com/panlin/archive/2013/01/06/2848017…

踩踩踩

http://china.findlaw.cn/laodongfa/ctjg/cy/cybc/ 二、合法裁员经济补偿标准的计算 按照《劳动合同法》第四十七条规定&#xff0c;经济补偿按劳动者在本单位工作的年限&#xff0c;每满一年支付一个月工资的标准向劳动者支付。六个月以上不满一年的&#xff0c;按一年计算;不…

c# 字节十六进制转十进制_用C中的十进制,八进制和十六进制数字初始化字节数组...

c# 字节十六进制转十进制C中的字节数组 (byte array in C) In C programming language, an unsigned char type can be used to declare byte array in C programming language. An unsigned char can contain a value from 0 to 255, which is the value of a byte. 在C编程语…

从uptime、stress、mpstat、pidstat观察CPU密集型、IO密集型、进程密集型切换的系统性能

uptime dyydyy-Lenovo-ThinkBook-14-IIL:~$ uptime10:27:10 up 7 min, 1 user, load average: 1.32, 0.99, 0.49结果分别对应&#xff1a;当前时间、系统运行时间、当前用户数目、过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average) 平均负载是指单位时间内&#xff0c…

解析和创建xml

http://www.cnblogs.com/Li-Cheng/p/3610474.html 转载于:https://www.cnblogs.com/mxw272618/p/3769900.html

python - VirtualEnv virtualenvwrapper

VirtualEnv 是什么 VirtualEnv用于在一台机器上创建多个独立的python运行环境&#xff0c;VirtualEnvWrapper为前者提供了一些便利的命令行上的封装。 为什么要用 - 隔离项目之间的第三方包依赖&#xff0c;如A项目依赖django1.2.5&#xff0c;B项目依赖django1.3。- 为部署应用…