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

服务器在启动时,可以通过载入和执行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持久化的更多相关文章
- Redis学习笔记六:持久化实验(AOF,RDB)
作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...
- Redis学习笔记九:独立功能之慢查询日志
Redis 的慢查询日志用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度. 服务器配置有两个相关选项: slowlog-log-slower-than 选项指 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- redis学习笔记(3)
redis学习笔记第三部分 --redis持久化介绍,事务,主从复制 三,redis的持久化 RDB(Redis DataBase)AOF(Append Only File) RDB:在指定的时间间隔 ...
- redis 学习笔记-cluster集群搭建
一.下载最新版redis 编译 目前最新版是3.0.7,下载地址:http://www.redis.io/download 编译很简单,一个make命令即可,不清楚的同学,可参考我之前的笔记: red ...
- Redis学习笔记4-Redis配置具体解释
在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redi ...
- redis学习笔记(详细)——高级篇
redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...
随机推荐
- OSG加载倾斜摄影数据
目录 1. 概述 2. 实例 2.1. 代码 2.2. 解析 3. 结果 1. 概述 ContextCapture(Smart3D)生成的倾斜摄影模型数据一般都形如如下组织结构: 在Data目录下包含 ...
- 新版gitbook导出pdf
文章目录 gitbook自带的npm模块gitbook 使用vscode的插件Markdown PDF 使用CommandBox GitBook Exporter 最近想把自己写的一个gitbook转 ...
- c语言----- 冒泡排序 for while do-while 递归练习
1. 冒泡排序简介(默认从小到大排序) 核心思想:只比较相邻的两个元素,如果满足条件就交换 5 8 2 1 6 9 4 3 7 0 目标:0 1 2 3 4 5 6 7 8 9 第一次排序: 5 ...
- 《名侦探柯南》动画登陆bilibili
不管你看没看过.喜不喜欢,也一定听说过<名侦探柯南>这部动画,它和<火影>.<海贼王>几部动画陪伴了一代人成长的道路,而且<名侦探柯南>还是这几部动画中 ...
- shell脚本(多线程批量创建用户)
shell脚本中的多线程 很多场景中会用到多线程,例如备份数据库,有100个库,正常备份效率极其低下.有了多线程原本可能需要10个小时备份,现在分10个线程同时去干,只要一个小时就解决了.今天就介绍下 ...
- 如何迅速分析出系统CPU的瓶颈在哪里?
内容出自极客时间专栏<Linux 性能优化实战> CPU 的性能指标那么多,CPU 性能分析工具一抓一大把,换成实际的工作场景,该观察什么指标.选择哪个性能工具呢? 不要担心,今天我就以多 ...
- Red 编程语言 2019 开发计划:全速前进!
开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> Red 编程语言开发团队昨日发布了一篇 "Full steam ahead" 的文章,对其 2 ...
- 简单的环绕散射 Simple Wrap Diffuse From GPU GEMS1
简单的环绕漫反射光照,实现起来特别简单,在Shader中加入以下几行: float diffuse = max(0,dot(L,N)); float wrap_diffuse = max(0, ( ...
- [20170616]recover copy of datafile 6.txt
[20170616]no copy of datafile 6 found to recover.txt --//最近几天一直被这个问题纠缠,我虽然不知道问题在哪来,还是找到简单的解决方法,做1个记录 ...
- PPT模板素材
http://588ku.com/sucai/0-dnum-0-54-0-1/