Redis持久化:使用AOF
目录
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相关推荐
- 二十二、redis持久化之AOF
AOF(Append Only File) redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB( ...
- redis持久化存储AOF与RDB
转载自 https://blog.csdn.net/qq_27384769/article/details/79479048 一.介绍 Redis中数据存储模式有2种:cache-only,persi ...
- [转]Redis持久化存储(AOF与RDB两种模式)
Redis中数据存储模式有2种:cache-only,persistence; cache-only即只做为"缓存"服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在&q ...
- [动图演示]Redis 持久化 RDB/AOF 详解与实践
Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...
- 24.redis持久化之AOF
1.什麽是AOF 与快照持久化通过直接保存 Redis 的键值对数据不同,AOF 持久化是通过保存 Redis 执行的写命令来记录 Redis 的内存数据.理论上说,只要我们保存了所有可能修改 Red ...
- Redis 持久化 RDB/AOF 详解与实践
目录 一.什么叫持久化? 二.Redis 为什么要持久化? 三.Redis 怎么实现持久化? 四.RDB 方式与 AOF 方式的优势对比 五.RDB 方式与 AOF 方式的缺点对比 六.工作原理 七. ...
- Redis持久化RDB/AOF详解与实践
Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...
- [动图演示]Redis 持久化 RDB/AOF 详解与实践 1
Redis 是一个开源( BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件.它支持的数据类型很丰富,如字符串.链表.集 合.以及散列等,并且还支持多种排序功能. 什么叫持 ...
- 十二、Redis持久化之AOF原理
一.什么是AOF 它也是Redis持久化的重要手段之一,aof->Append Only File,只追加文件,也就是每次处理完请求命令后都会将此命令追加到aof文件的末尾.而RDB是压缩成二进 ...
- 10. Redis持久化之AOF
10. AOF(Append Only File) 将所有的命令都记录下来,类似histrory的操作, 恢复的时候会将这个文件全执行一遍 10.1 简介 以日志的形式来记录每个写操作,将Redis执 ...
最新文章
- PNAS:亚马逊雨林向农业的转变导致土壤细菌群落的生物均质化
- java读取excel并替换占位符_正则表达式 – 有没有一种简单的方法来替换Excel中的占位符?...
- 企业信息化快速开发平台JeeSite
- 发布一个验证码生成组件
- ASP.NET把DataTable转成XML文件的函数
- 第8章 多项式回归与模型泛化
- MYsql:net start mysql 失败 发生系统错误5
- mq集群要建传输队列吗_面试官:消息队列这些我必问!
- php抓取页面生成html,PHP smiple html dom抓取页面内容
- javascript md5加密算法
- JS - Promise
- 让木桶没有短板,FISCO BCOS全面推进并行化改造
- RHEL 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)
- 2021数模美赛LaTeX+Word论文模板更新!
- 【BZOJ4199】品酒大会(NOI2015)-后缀数组+并查集
- 华师计算机学院在职研究生,2021年华南师范大学在职研究生招生简章
- 计算机图形学实验一 《MFC绘图基础》
- 智牛股_第5章_Netty+PowerDesigner
- 押三中三,元气森林赢麻了 论元气森林如何成为冬奥会最大赢家?
- 查看centos自带jdk版本并卸载