redis持久化之AOF持久化

AOF与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,aof持久化是通过保存redis服务器所执行的写命令来记录数据库状态的。被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存的。

1.AOF持久化的实现

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

1.1 命令追加

当AOF持久化功能处于打开状态,服务器在执行完一个写命令之后,会以协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区末尾:

struct redisServer{
//...
//AOF缓冲区
sds aof_buf
//...
};

例如 redis>SET KEY VALUE

那么服务器在执行这个set命令之后,会将以下协议内容追加到aof_buf缓冲区的末尾:

*3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\nVALUE\r\n

1.2 AOF文件的写入与同步

redis服务器进程就是一个事件循环(loop),这个循环中的文件事件负责接收客户端的命令请求,以及向客户端发送命令回复,而时间事件则负责执行像serverCron函数这样需要定时运行的函数。

因为服务器在处理文件事件时可能会执行写命令,使得一些内容被追加到aof_buf缓冲区里面,所以在服务器每次结束一个事件循环之前,它都会调用flushAppendOnlyFile函数,考虑是否需要将

aof_buf缓冲区的内容写入和保存到AOF文件里面。

def eventLoop():
while true:
//处理文件事件,接收命令请求以及发送命令回复
//处理命令请求时可能会有新内容被追加到aof_buf缓冲区
processFileEvents()
//处理时间事件
processTimeEvents()
//考虑是否将aof_buf中的内容写入和保存到AOF文件里面
flushAppendOnlyFile()

flushAppendOnlyFile函数的行为由服务器配置的appendfsync选项的值来决定,各个不同值产生的行为如下表所示:

appendfsync默认值是everysec,可以参考redis.conf配置文件

原文地址:https://www.cnblogs.com/juin1058/p/11640705.html

时间: 2024-10-08 02:10:20

redis持久化之AOF持久化的相关文章

redis配置文件基本解析以及RDB持久化与AOF持久化

redis.conf 我们安装成功之后就会有这个配置文件,但是我们一般都不推荐直接使用出厂的配置文件,而是单独拷贝一份使用,以避免我们因为配置错误而带来不必要的麻烦. 如图我单独拷贝了一份在根目录下面的文件夹: redis单元: Tcp-backlog: 设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列+已经完成三次握手队列. 在这里三次握手队列我参考另一篇博文:https://blog.csdn.net/ityouknow/article

(四)持久化之---AOF持久化的配置和原理

AOF持久化及AOF重写的配置: 默认AOF方式是关闭的,如下图: 如果要开启的话,就是把no改写成yes.如下图: 默认文件名称appendonly.aof,你也可以修改文件名.默认保存目录同样也是配置文件中dir配置项中的设置,它和RDB共用一个目录.如下图: 默认同步策略是每秒,如下图: 我们对数据库做一些操作然后查看一下appendonly.aof文件内容 它会记录所有写操作内容. *2 表示2个参数 $6 表示第一个参数长度为6 SELECT 第一个参数 $1 第二个参数长度为1 0

redis的 rdb 和 aof 持久化的区别 [转]

aof,rdb是两种 redis持久化的机制.用于crash后,redis的恢复. rdb的特性如下: Code: fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来.save, shutdown, slave 命令会触发这个操作.粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢复. aof有如下特性: Code: 把写操作指令,持续的写到一个类似日志文件里.(类似于从postgresql等数

Redis AOF持久化和RDB持久化区别

一.redis持久化----两种方式 1.redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File). 2.RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上: 3.AOF,则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了. 4.其实RDB和AOF两种方式也可以同时使用,在这种情况

redis的rdb与aof持久化机制

Redis提供了两种持久化方案:RDB持久化和AOF持久化,一个是快照的方式,一个是类似日志追加的方式 RDB快照持久化 RDB持久化是通过快照的方式,即在指定的时间间隔内将内存中的数据集快照写入磁盘.在创建快照之后,用户可以备份该快照,可以将快照复制到其他服务器以创建相同数据的服务器副本,或者在重启服务器后恢复数据.RDB是Redis默认的持久化方式 save 900 1 当时间到900秒时,如果至少有1个key发生变化,就会自动触发bgsave命令创建快照 save 300 10 当时间到3

redis++:Redis持久化 rdb & aof 工作原理及流程图 (三)

RDB的原理: 在Redis中RDB持久化的触发分为两种:自己手动触发与Redis定时触发. 针对RDB方式的持久化,手动触发可以使用: 1):save:会阻塞当前Redis服务器,直到持久化完成,线上应该禁止使用. 2):bgsave:该触发方式会fork一个子进程,由子进程负责持久化过程,因此阻塞只会发生在fork子进程的时候. 而自动触发的场景主要是有以下几点: 1):根据我们的 save m n 配置规则自动触发: 2):从节点全量复制时,主节点发送rdb文件给从节点完成复制操作,主节点

redis 安装配置及持久化详解

一.redis简介 二.redis安装 三.redis配置文件详解 四.redis持久化详解 1.redis 简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询. Redi

redis的主从复制和持久化

主从复制 虽然redis有持久化机制,但是有时redis服务器重启也会丢失数据,因为redis重启后会将硬盘中的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能就会导致数据丢失,如果通过redis的主从复制就能很好的避免这种单点故障. 主redis数据库有两个从redis,即使其中一台服务器宕机,其他两台服务器照样可以正常工作 主redis和从redis是保持实时同步的,当主redis写入数据时通过主从复制机制会复制到两个从redis服务器上. 只有一个主redis,可以有多个从redi

Redis的两种持久化操作RDB-AOF

Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化文件即可实现数据恢复. RDB是什么 RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为**手动触发**和**自动触发**. 1.1.1 触发机制 手动触发分别对应save和bgsave命令: save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,先上环境不建议使用.运行save命令对应Redis日志如