目录

APPEND-ONLY FILE

命令写入过程

AOF文件


上一篇日志总结了Redis持久化方式中的RDB,它是Redis默认使用的持久化方式,使用RDB将数据持久化到磁盘的好处,可以对指定时间间隔内的数据备份,备份的数据只生成一个dump.rdb文件,备份时效率高,因为Redis主进程只需创建一个子进程来完成持久化任务,之后可以继续处理收到的其他命令。数据恢复速度快,简单,只需将dump.rdb文件复制到bin目录下,再重启Redis即可。缺点是如果对数据完整性和一致性有比较高的要求,那么RDB方式并不是十分适合,因为在定时进行持久化操作前系统出现问题崩溃了,那么没有来得及写入磁盘的数据都会丢失。在Redis持久化处理时我们有两种方案可以选择,RDB和AOF,AOF不是默认的选择,但是它可以弥补RDB在数据完整性和一致性方面的不足,这篇日志就来总结一下Redis持久化的第二种方式,AOF。

APPEND-ONLY FILE

AOF与RDB不同的是,AOF会将Redis的写入命令记录成日志文件,后面的写操作都会追加记录进来,数据恢复时,根据日志文件的内容将这些写命令按顺序从头到尾执行一次,这种方式比起RDB来说数据完整性和一致性更高。先来看下在Redis中启动AOF持久化操作:

和启动关闭RDB一样,使用CONFIG SET命令启用AOF持久化,然后可以用INFO PERSISTENCE命令查看AOF的启动状态,由上图可以看到,aof_enabled:1,证明启动成功,其次我们也可以直接ls –l查看目录下有没有生成appendonly.aof文件,有代表AOF启用成功。

命令写入过程

也就是说,当AOF功能启用时,Redis会在目录下创建一个AOF文件,相当于RDB文件,之后每当Redis接收到一个写入命令,对内存数据进行了修改,那么这条命令会append,拼接、追加到AOF文件中。对比起前面的RDB持久化,上一篇日志总结到,RDB持久化会在什么时候将内存数据保存到磁盘里dump.rdb文件中呢?这个参数我们可以自己设置,通过命令或者修改redis.conf文件中的SNAPSHOTTING参数,可以900秒内有超过一个键发生改变就进行一次写入,或300秒内有超过10个键发生改变就进行一次写入。

同理,AOF文件什么时候进行一次写入命令保存到AOF文件中呢?是每执行一条有实际修改内存数据的写入命令就立刻将命令保存到AOF文件里?在Redis执行一条写入命令后,会先将该命令保存到缓冲区中,当系统调用fsync()函数后,缓冲区中的数据才会被写入磁盘,保存到appendonly.aof文件中。这个时机可以通过修改redis.conf文件中的APPEND ONLY MODE来设置:

可以看到此时的配置参数是appendonly no,意思是永不调用fsycn(),由系统来决定何时将命令数据从缓冲区写入到磁盘中。此外还有两个选项可以选择,appendonly always和appendonly everysec,前者表示对于Redis的每一个写入命令,执行完后都调用一次fsycn()把数据写入磁盘,这样可以最大化确保数据不丢失,哪怕发生系统崩溃,丢失的也只是一次的写入操作。不过频繁调用fsycn()明显是不合适的,因为这是一个阻塞操作,会让Redis服务器的性能明显下降。后者everysec表示每秒钟调用一次fsycn(),一秒钟可以做很多事情了,如果系统崩溃,丢失的是1秒的数据操作。

由此可见使用AOF优点是带来了更高的数据完整性,appendonly.aof文件中保存的是写入修改命令,清晰易懂。我们可以根据其完成数据的恢复。缺点是AOF文件随着不断写入,通常所占存储会大于RDB文件,且RDB文件存储的是数据备份,恢复时效率快,AOF文件由于存储的是命令,数据恢复时相当于在进行一次数据重建,效率比RDB慢。不光在数据恢复时AOF数据慢于RDB,在持久化方式运行时AOF的效率也要低于RDB,所以,在两者之中选择时,要看你是希望用放弃更高的数据完整性和一致性换取运行效率,还是希望放弃效率追求更高的安全性了,前者选用RDB,后者选用AOF。

AOF文件

按照惯例我们来看一下这个AOF文件,也就是写入命令append到的appendonly.aof文件里面都写了些什么,首先我们往Redis服务器里面执行几条SET命令修改数据:

然后用vim打开appendonly.aof文件,可以看到,里面有我们刚刚执行的SET命令,还有开头的一个SELECT,索引是0,表示的是选择索引为0的数据库,Redis数据库索引有0-15,默认从0开始。

Redis持久化:使用AOF相关推荐

  1. 二十二、redis持久化之AOF

    AOF(Append Only File) redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB( ...

  2. redis持久化存储AOF与RDB

    转载自 https://blog.csdn.net/qq_27384769/article/details/79479048 一.介绍 Redis中数据存储模式有2种:cache-only,persi ...

  3. [转]Redis持久化存储(AOF与RDB两种模式)

    Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为"缓存"服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在&q ...

  4. [动图演示]Redis 持久化 RDB/AOF 详解与实践

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  5. 24.redis持久化之AOF

    1.什麽是AOF 与快照持久化通过直接保存 Redis 的键值对数据不同,AOF 持久化是通过保存 Redis 执行的写命令来记录 Redis 的内存数据.理论上说,只要我们保存了所有可能修改 Red ...

  6. Redis 持久化 RDB/AOF 详解与实践

    目录 一.什么叫持久化? 二.Redis 为什么要持久化? 三.Redis 怎么实现持久化? 四.RDB 方式与 AOF 方式的优势对比 五.RDB 方式与 AOF 方式的缺点对比 六.工作原理 七. ...

  7. Redis持久化RDB/AOF详解与实践

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  8. [动图演示]Redis 持久化 RDB/AOF 详解与实践 1

    Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...

  9. 十二、Redis持久化之AOF原理

    一.什么是AOF 它也是Redis持久化的重要手段之一,aof->Append Only File,只追加文件,也就是每次处理完请求命令后都会将此命令追加到aof文件的末尾.而RDB是压缩成二进 ...

  10. 10. Redis持久化之AOF

    10. AOF(Append Only File) 将所有的命令都记录下来,类似histrory的操作, 恢复的时候会将这个文件全执行一遍 10.1 简介 以日志的形式来记录每个写操作,将Redis执 ...

最新文章

  1. PNAS:亚马逊雨林向农业的转变导致土壤细菌群落的生物均质化
  2. java读取excel并替换占位符_正则表达式 – 有没有一种简单的方法来替换Excel中的占位符?...
  3. 企业信息化快速开发平台JeeSite
  4. 发布一个验证码生成组件
  5. ASP.NET把DataTable转成XML文件的函数
  6. 第8章 多项式回归与模型泛化
  7. MYsql:net start mysql 失败 发生系统错误5
  8. mq集群要建传输队列吗_面试官:消息队列这些我必问!
  9. php抓取页面生成html,PHP smiple html dom抓取页面内容
  10. javascript md5加密算法
  11. JS - Promise
  12. 让木桶没有短板,FISCO BCOS全面推进并行化改造
  13. RHEL 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)
  14. 2021数模美赛LaTeX+Word论文模板更新!
  15. 【BZOJ4199】品酒大会(NOI2015)-后缀数组+并查集
  16. 华师计算机学院在职研究生,2021年华南师范大学在职研究生招生简章
  17. 计算机图形学实验一 《MFC绘图基础》
  18. 智牛股_第5章_Netty+PowerDesigner
  19. 押三中三,元气森林赢麻了 论元气森林如何成为冬奥会最大赢家?
  20. 查看centos自带jdk版本并卸载

热门文章

  1. 系统服务配置 服务(Service)-详细版
  2. 盛大 sina 共同的选择:开曼群岛
  3. 计算机磁道大小,磁道宽度
  4. 云隐-设计模式解析与实战
  5. 火狐hackbar插件免收费
  6. [深入理解Android卷一全文-第四章]深入理解zygote
  7. 5G能让你的网盘提速吗?
  8. linux系统修改主机名会不会影响,在Linux系统中修改主机名
  9. 为 Python Server Pages 和 Oracle 构建快速 Web 开发环境
  10. 数据库中关系代数是什么_什么是关系代数?