Redis - 持久化-AOF

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis - 持久化-AOF

【1】AOF简介

以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录)。只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据。


换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

AOF保存的是appendonly.aof文件。

与RDB做对比,AOF文件更大,但是安全更高。


【2】APPEND ONLY MODE

配置文件如下:



将其开启:


测试appendonly.aof数据备份与恢复

① 删除掉/usr/local/bin目录下的rdb文件与aof文件后重启redis



② 进行四个写操作,然后查看aof文件与rdb文件


③ 查看aof文件信息如下:


就是刚才的写操作指令。


④ 删除掉rdb文件,并重启redis(发现有rdb文件,再次删掉)。使用客户端检测keys,表明数据成功恢复。


测试rdb文件与aof文件共存,首先加载aof文件

① vim修改aof文件(生成环境不允许)



② 客户端shutdown生成rdb文件

此时,rdb文件是健康的,aof文件是错误的。


③ 重启,使用客户端链接


链接报错,说明首先找的是aof文件。


AOF文件修复

redis-check-aof --fix appendonly.aof


同理,rdb文件修复同上:

redis-check-rdb  --fix dump.rdb

总结,AOF备份、修复与恢复如下:


【3】AOF配置

appendfsync


其有如下属性值:

always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好。

everysec:出厂默认推荐,异步操作,每秒记录 如果一秒内宕机,有数据丢失。

no:可以忽略这个属性值了。


20171031171742286.png



no-appendfsync-on-rewrite

重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性。

auto-aof-rewrite-min-size

设置重写的基准值(大小)。


auto-aof-rewrite-percentage

设置重写的基准值(百分比)。

【4】AOF重写

① 是什么?


AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制。当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

可以使用命令:

bgrewriteaof


② 重写原理


AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。


重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。


③ 触发机制


Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。

真实生产环境中,不可能为64M这么小的,一般为3G起步。


【5】AOF优劣

[1]优势

① 每修改同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好。


② 每秒同步:appendfsync everysec 异步操作,每秒记录 如果一秒内宕机,有数据丢失。


③ 不同步:appendfsync no 从不同步。


[2]劣势


① 相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb。


② aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同。


【6】RDB和AOF该如何选择


RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。


AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些

命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。


Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。


① 只做缓存:如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.


② 同时开启两种方式


在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据。因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。


RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。


那要不要只使用AOF呢?


建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的bug,留着作为一个万一的手段。


③ 性能建议


因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。


如果Enalbe AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。


代价一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。


只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。默认超过原大小100%大小时重写可以改到适当的数值。


如果不Enable AOF ,仅靠Master-Slave Replication 实现高可用性也可以。能省掉一大笔IO也减少了rewrite时带来的系统波动。


代价是如果Master/Slave同时倒掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个(新浪微博就选用了这种架构)。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
27天前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
27天前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
42 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
3月前
|
存储 缓存 NoSQL
Redis中的rdb和aof
本文深入探讨了Redis的持久化机制,包括RDB和AOF两种方式。详细解释了RDB的工作原理、优势和劣势,以及AOF的实现原理、配置选项、文件重写机制和三种数据同步方式,还介绍了AOF文件修复工具redis-check-aof的使用,并通过实例展示了如何开启和配置AOF持久化方式。
Redis中的rdb和aof
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
27 2
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
66 1
|
3月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
3月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
49 1
|
4月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
139 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
3月前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
42 0