REdis AOF文件结构分析

REdis-5.0之前的AOF文件没有文件头,不管是REdis-5.0之前还是REdis-5.0,它们的AOF文件体内容都如下图所示:

从REdis-5.0开始,AOF有文件头,目的是支持同时加载RDB和AOF文件。AOF文件头和RDB文件头基本相同,但RDB文件头多了三个字段。

先看AOF和RDB通用部分的文件头内容:

1) 头5字节固定为REDIS

2) 第6~9共四字节为RDB版本号

3) 接下来为redis-ver和它的值,即redis版本

4) 接着redis-bits和它的值,即redis的位数,值为32或64

5) 接着为ctime和它的值,值为当前时间戳

6) 接着为used-mem和它的值

7) 最后是aof-preamble和它的值,值为0或1,1表示RDB有效。

RDB的文件头和AOF基本相同,但在aof-preamble之前多了如下三项:

1) repl-stream-db

2) repl-id

3) repl-offset

AOF文件中并未保存已复制的偏移(repl-offset),这个信息只保存在RDB文件头中。因此当进程重启时,并不能从AOF文件恢复复制偏移,除非以RDB方式运行(配置项appendonly为NO时)。

但是从REdis-5.0开始,加载AOF文件时,先读AOF文件头,如果发现有文件头(Reading RDB preamble from AOF file...),则会先从RDB加载数据,并恢复前面提到的复制偏移(repl-offset)等三项数据,剩余部分再从AOF文件读取(Reading the remaining AOF tail...)。

原文地址:https://www.cnblogs.com/aquester/p/10529549.html

时间: 2024-11-09 00:49:39

REdis AOF文件结构分析的相关文章

redis aof文件过大问题

http://www.itnose.net/detail/6682725.html 最近新安装了一台redis,版本为redis-3.2.5 数据盘用的是固态硬盘. 之前用的是普通硬盘,redis日志天天报 Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.

redis 持久化 如果 AOF 文件出错了,怎么办?

服务器可能在程序正在对 AOF 文件进行写入时停机, 如果停机造成了 AOF 文件出错(corrupt), 那么 Redis 在重启时会拒绝载入这个 AOF 文件, 从而确保数据的一致性不会被破坏. 当发生这种情况时, 可以用以下方法来修复出错的 AOF 文件: 为现有的 AOF 文件创建一个备份. 使用 Redis 附带的 redis-check-aof 程序,对原来的 AOF 文件进行修复. $ redis-check-aof --fix (可选)使用 diff -u 对比修复后的 AOF

redis怎么将rdb文件和aof文件还原数据库

1   AOF ----->      appendonly  yes     2  cp   appendonly.aof 到redis的数据库目录也就是配置文件里面的dir关键字   3  重启服务 2  RDB  ----->      appendonly   no     2 cp    dump.rdb到redis数据库目录也就是配置文件里面的dir关键字   3  重启服务 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加

redis的redis.conf文件详解

是2.6.12版本的 1 redis.conf配置文件 2 3 # Redis configuration file example 4 5 # Note on units: when memory size is needed, it is possible to specifiy 6 # it in the usual form of 1k 5GB 4M and so forth: 7 # 8 # 1k => 1000 bytes 9 # 1kb => 1024 bytes 10 # 1m

Redis源码剖析和注释(十八)--- Redis AOF持久化机制

Redis AOF持久化机制 1. AOF持久化介绍 Redis中支持RDB和AOF这两种持久化机制,目的都是避免因进程退出,造成的数据丢失问题. RDB持久化:把当前进程数据生成时间点快照(point-in-time snapshot)保存到硬盘的过程,避免数据意外丢失. AOF持久化:以独立日志的方式记录每次写命令,重启时在重新执行AOF文件中的命令达到恢复数据的目的. Redis RDB持久化机制源码剖析和注释 AOF的使用:在redis.conf配置文件中,将appendonly设置为y

redis AOF保存机制

网上说AOF有三种保存方式,不自动保存.每秒自动保存.每命令自动保存. 其中每秒自动保存这个看起来很美好,但是可能会被各种IO的时间所延迟,所以究竟是怎么判断每秒保存的,并不是太明白,故有此文. AOF 命令同步 Redis 将所有对数据库进行过写入的命令(及其参数)记录到 AOF 文件, 以此达到记录数据库状态的目的, 为了方便起见, 我们称呼这种记录过程为同步. 举个例子, 如果执行以下命令: redis> RPUSH list 1 2 3 4 (integer) 4 redis> LRA

Redis AOF 全持久化

简介: Redis AOF 持久化,将每次接收到更改 redis 数据的操作都记录到一个 aof 文件,当服务器意外宕机或 redis 服务器非法关闭时,不会丢失数据. 可以做到数据安全化,但是性能会受到影响. 1.修改 redis.conf shell > vim /usr/local/redis/redis.conf daemonize yes port 6379 timeout 300 loglevel debug pidfile /usr/local/redis/logs/redis.p

redis学习(二)redis.conf文件配置

取自: https://www.cnblogs.com/pqchao/p/6558688.html 为了更好的使用redis,我们需要详细的了解redis配置文件及相关参数作用. bind 127.0.0.1 bind 192.168.1.100 绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址.这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接.如果bind选项为空的话,那会接受所有来自于可用网络接口的连接.如上配置,绑定一个127.0.0.1的本机

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

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