目标:如何选择RDB、AOF
同时开启
Redis先加载AOF文件来恢复原始数据,因为AOF数据比RDB更完整,但是AOF存在潜在的bug,如把错误的操作记录写入了AOF,会导出数据恢复失败,所以可以把RDB作为后备数据。
为了考虑能,可以只在Slave上开启RDB,并且15min备份一次,如果为了避免AOF rewite的IO以及阻塞,可以在Redis集群中不开启AOF,靠集群的备份机制来保证可用性,在启动时选取较新的RDB文件,如果整个集群全部崩溃,会丢失15min前的数据。
混合模式
Redis4.0开始支持该模式
解决的问题:Redis在重启时通常是加载AOF文件,但加载速度慢。因为RDB数据不完整,所以加载AOF。
开启方式:aof-use-rdb-preamble true
开启后,AOF在重写时会直接读取RDB中的内容。
运行过程:通过bgrwriteaof完成,不同的是当开启混合持久化后
- 子进程会把内存中的数据以RDB的方式写入AOF中
- 把重写缓冲区中的增量命令以AOF方式写入到文件
- 将含有RDB个数和AOF个数的AOF数据覆盖旧的AOF文件
新的AOF文件中,一部分数据来自RDB文件,一部分来自Redis运行过程时的增量数据
数据恢复
当我们开启了混合持久化时,启动Redis依然优先加载AOF文件,AOF文件加载可能有两种情况如下:
- AOF文件开头是以RDB的格式,先加载RDB内容再加载剩余的AOF
- AOF文件开头的格式,直接以AOF格式加载整个文件
优点:既能快速备份又能避免大量数据丢失
缺点:RDB是压缩格式,AOF在读取它时可读性较差
二者动态切换
在Redis2.2或以上版本,可以在重启的情况下,从RDB切换到AOF"
- 为最新的dump.rdb文件创建一个备份
- 将备份放到一个安全的地方
# 复制备份
cp dump.rdb dump.rdb.bak
执行以下两条命令:
# 开启aof
redis-cli config set appendonly yes
# 关闭rdb
redis-cli config set save “”
- 确保写命令会被正确地追加到 AOF 文件的末尾
- 执行的第一条命令开启了 AOF 功能: Redis 会阻塞直到初始 AOF 文件创建完成为止, 之后 Redis 会继续处理命令请求, 并开始将写入命令追加到 AOF 文件末尾
Comments NOTHING