Redis的RDB文件与AOF文件
本笔记参考《Redis设计与实现》 P118 ~ P150
RDB文件
1、RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据
2、SAVE
命令由服务器进程直接执行保存操作,该命令会阻塞服务器
3、BGSAVE
命令由子进程执行保存操作,不会阻塞服务器
注意此时服务器的状态:在处理BGSAVE
命令时,服务器处理SAVE
、BGSAVE
、BGREWRITEAOF
三个命令方式与平时不同。
- 客户端发送的
SAVE
命令会被服务器拒绝,服务器禁止SAVE
命令与BGSAVE
同时执行,是为了避免父进程与子进程同时执行rdbSave
调用,产生竞争条件。 - 客户端发送的
BGSAVE
命令也会被服务器拒绝,因为同时执行两个BGSAVE
也会产生竞争条件。 - 最后:
BGSAVE
和BGREWRITEAOF
不能同时执行:因为两个命令实际工作都是由子进程执行,所以两个命令在操作方面没有冲突,但是并发出两个子进程,并且两个子进程都是同时执行大量的磁盘写入操作的话不是个好主意。
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文件,完成文件重写操作
Redis的RDB文件与AOF文件相关推荐
- Redis的RDB持久化和AOF持久化区别
RDB机制的优势和略施 RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘. 也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb ...
- 阿里二面:Redis 中的 AOF 文件太大了怎么办?
一.前言 写这篇文章的目的是来自我的一位粉丝的投稿,说面试阿里被问到了这个问题.不得不说阿里的面试问的都挺有质量,一般的我们只会关注 Redis 的两种持久化方式 RDB 和 AOF.但老周这里盲猜面 ...
- Redis 中的 持久化 AOF持久化 打开AOF持久化功能 设置AOF文件的冲洗频率 AOF重写 AOF持久化的优缺点
这里写目录标题 15.2 AOF持久化 15.2.1 打开AOF持久化功能 15.2.2 设置AOF文件的冲洗频率 15.2.3 AOF重写 1.BGREWRITEAOF命令 其他信息 2.AOF重写 ...
- redis aof 文件重写机制
redis 随着命令不断的写入数据,aof 文件会越来越大.为了解决这个问题,redis 引入了 aof 文件重写机制,以便压缩 aof 体积 ,更小的 aof 文件可以更快的被 redis 加载. ...
- Redis AOF 文件 恢复数据
redis AOF 文件 恢复数据 redis.conf 中,将配置 appendonly no,改为appendonly yes,将其打开. 通过 redis-server redis.conf 的 ...
- Redis持久化 - RDB和AOF
一.持久化的作用 1. 什么是持久化 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘). 持久化Redis所有数据保持在内存中,对数据的更新将异步地保 ...
- redis php 持久化,详解Redis RDB持久化、AOF持久化,
详解Redis RDB持久化.AOF持久化, 1.持久化 1.1 持久化简介 持久化(Persistence),持久化是将程序数据在持久状态和瞬时状态间转换的机制,即把数据(如内存中的对象)保存到可永 ...
- Redis持久化 RDB和AOF 比较与选择
Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...
- redis持久化RDB和AOF
Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...
最新文章
- 编写简单的服务和客户端(C++)---ROS学习第10篇
- 建模准备一定要做的这几件事
- ABAP门派现状报告
- PAT L3-007 天梯地图
- 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
- distinct过滤掉重复记录并且显示所有字段_MySQL的所有姿势,我都帮你准备好了...
- PowerDesigner运行自定义VBS脚本,复制Name到Comment
- 多个服务器数据互通_数据中心
- 创建一个单选框的html代码是,HTML试题(超有用).doc
- cpu224xp生产方案
- 监控服务器系统密码忘了怎么办,监控服务器系统配置密码
- webp格式是什么?webp格式怎么打开?webp格式怎么转换gif/jpg/png等?
- matlab的比较器模块,simulink中的比较器
- QInputDialog,QTextEdit,QLineEdit,Qt右键菜单英文转中文问题
- The server time zone value '?й???????' is unrecognized or represents more than one time zone.
- 宁芝普拉姆键盘说明书
- word2vec原理
- Win10怎么通过设置组策略编辑器锁定IE主页
- mysql避免回文_谈谈回文子串
- tar.gz文件命名及压缩解压方法