Redis的AOF持久化

每当Redis-Server接收到写数据时,就把命令以文本形式追加到AOF文件里,当重启Redis服务时,AOF文件里的命令会被重新执行一次,重新恢复数据。当AOF过大时将重写AOF文件。

工作原理

> lpush list 1 2 3 4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
127.0.0.1:6379> lpop list
"4"
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"

appendonly.aof文件中

*2
$6
SELECT
$1
0
*6
$5
lpush
$4
list
$1
1
$1
2
$1
3
$1
4
*2
$4
lpop
$4
list

可以看到上面的示例中写操作有lpush和lpop命令,在AOF文件中存在lpush和lpop。SELECT命令为AOF程序自动加上的选择数据库。

AOF命令写入的内容为文本协议格式,如:命令lpush list 1 2 3 4 的文本形式为"*6\r\n$5\r\nlpushr\n$4r\nlist\r\n$1\r\n1$1\r\n2$1\r\n3$1\r\n4\r\n"。将文本内容追加到aof_buf(缓冲区)中,AOF缓冲区根据相应的策略同步写入AOF文件中,当AOF文件越来越大时,将AOF文件重写。

启动AOF持久化

在redis.conf文件中

appendonly no  #写成yes,打开AOF持久化

AOF写入频率

# appendfsync always
appendfsync everysec # 默认
# appendfsync no
  1. alaws:总是同步到AOF文件,每一个命令都写入,安全,速度慢
  2. everysec:每秒写入一次,安全性好,最多丢失1秒钟的数据
  3. no:写入AOF文件工作交给操作系统,由操作系统写入AOF文件,安全性一般

文件

aof文件目录通过RDB文件目录,他们共享同一个目录

dir ./

appendfilename "appendonly.aof"

通过config set dir {newDir} 动态修改dir配置

通过config set dbfilename {appendfilename} 动态修改AOF文件名称

重写

AOF文件过大时,Redis将fork()一个子进程对内存数据进行比那里逆化成Redis命令,序列化文本格式后写入到新的AOF文件中。然后将重写时发生的增量AOF文件追加到新的AOF文件中,最后替换旧的AOF文件。

自动重写

auto-aof-rewrite-percentage 100  # 比上次重写时文件增大了100%就重写AOF文件
auto-aof-rewrite-min-size 64mb # AOF文件至少超过为64M时重写AOF文件

自动重写必须满足:当前AOF文件大小 > auto-aof-rewrite-min-size &&(当前文件AOF文件大小减去上次重写时AOF文件大小)除以 上次重写时AOF文件大小 = auto-aof-rewrite-percentage

手动重写

> bgrewriteaof
Background append only file rewriting started

优缺点

优点

  1. 比RDB文件可靠,everysec模式下只丢1秒数据。
  2. AOF文件为纯文本文件。文件协议格式容易恢复成Redis命令。
  3. AOF文件太大会进行自动重写。

缺点

  1. 同等数据下,比RDB文件大。
  2. 同步过程中Redis主进程会被阻塞,everysec是个折中方案。

数据恢复

Redis读取AOF文件数据还原过程

  1. 创建一个不带网络的客户端
  2. 读取AOF文件内容,还原成命令
  3. 将命令在1中的客户端执行
  4. 重复2,3的过程

结语

本人深知水平有限,欢迎指正本文错误之处。


一文了解:Redis的AOF持久化的更多相关文章

  1. 12.redis的AOF持久化深入讲解各种操作和相关实验

    1.AOF持久化的配置 2.AOF持久化的数据恢复实验3.AOF rewrite4.AOF破损文件的修复5.AOF和RDB同时工作 ---------------------------------- ...

  2. Golang 实现 Redis(4): AOF 持久化与AOF重写

    本文是使用 golang 实现 redis 系列的第四篇文章,将介绍如何使用 golang 实现 Append Only File 持久化及 AOF 文件重写. 本文完整源代码在作者GithubHDT ...

  3. redis 开启AOF 持久化

    redis 开启AOF 找到redis 安装目录 打开 redis.conf  修改以下参数: appendonly  yes        (默认no,关闭)表示是否开启AOF持久化: append ...

  4. Redis数据持久化之AOF持久化

    一.RDB持久化的缺点创建RDB文件需要将服务器所有的数据库的数据都保存起来,这是一个非常耗费资源和时间的操作,所以服务器需要隔一段时间才能创建一个新的RDB文件,就也是说创建RDB文件的操作不能执行 ...

  5. 使用AOF持久化文件实现还原Redis数据库并得到RDB持久化文件

    目录 1 编写本文的初衷 2 具体实施 2.1 Redis持久化概念简介 2.2 获取指定Redis的AOF持久化文件 2.3 把Redis的持久化AOF文件转换为RDB文件 1 编写本文的初衷 因为 ...

  6. redis源码分析(四)--aof持久化

    Redis aof持久化 Redis支持两种持久化方式:rdb与aof,上一篇文章中已经大致介绍了rdb的持久化实现,这篇文章主要介绍aof实现. 与rdb方式相比,aof会使用更多的存储空间,因为它 ...

  7. 图解 Redis | 不就是 AOF 持久化嘛

    AOF 日志 试想一下,如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它,这不就相当于恢复了缓存数据了 ...

  8. Linux 安装redis,redis发布订阅,持久化

    安装redis 1.安装redis的方式 -yum (删除这个yum安装的redis,我们只用源码编译安装的) -rpm -源码编译 2.删除原本的redis yum remove redis -y ...

  9. [翻译自官方]什么是RDB和AOF? 一文了解Redis持久化!

    ​概述 本文提供Redis持久化技术说明,  建议所有Redis用户阅读. 如果您想更深入了解Redis持久性原理机制和底层持久性保证, 请参考文章 揭秘Redis持久化: http://antire ...

随机推荐

  1. echo-nginx-module的安装、配置、使用

    一.下载压缩包 [root@www nginx-1.16.0]# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.t ...

  2. 如何用ModelSim对Xilinx ISE产生的网表进行仿真

    图: 在对设计的芯片进行测试时,经常要用到FPGA,可是里面的仿真工具却不如Modelsim那么好用,且在规模比较大时,ISE在仿真时,软件经常会报告内存限制的问题,此时一般会切换到Modelsim软 ...

  3. 8.秋招复习简单整理之Spring面试一般问题

    1.不同版本的Spring Framework有哪些主要功能? 2.什么是Spring Framework? Spring是一个轻量级的IOC和AOP容器框架,是为Java应用程序提供基础性服务的一套 ...

  4. Spring Cloud Alibaba | 序言

    目录 Spring Cloud Alibaba | 序言 1. Spring Cloud Alibaba是什么? 2. 主要功能 3. 组件 4. 版本说明 4.1 版本依赖关系 4.2 组件版本关系 ...

  5. C语言学习书籍推荐《Practical C++ Programming》下载

    下载链接 :点我 C++ is a powerful, highly flexible, and adaptable programming language that allows software ...

  6. Java多线程(六):wait(),notify()和notifyAll()

    wait(),notify()和notifyAll()介绍 1.wait() 使当前线程等待,直到另一个线程调用notify(),notifyAll()或者中断,当前线程调用wait()之前必须持有锁 ...

  7. Java 技术交流群,微信群

    专注Java相关技术:SSM.Spring全家桶.微服务.MySQL.集群.dubbo.分布式.中间件.Linux.网络.多线程.Jenkins.Nexus.Docker.ELK等等! 由于微信群限制 ...

  8. spring boot admin抛出"status":401,"error":"Unauthorized"异常

    打开spring boot admin的监控平台发现其监控的服务明细打开均抛出异常: Error: {"timestamp":1502749349892,"status& ...

  9. 数据结构-循环队列(Python实现)

    今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删 ...

  10. Ubuntu 下载 Eclipse + tomcat 配置

    tomcat下载 去网站下载core中的 tar.gz的文件 下载之后依然转移到/opt文件夹然后进行解压 sudo cp apache-tomcat- /opt sudo tar -zxvf apa ...