一、RDB
RDB(Redis DataBase) :RDB 持久性以指定的时间间隔执行数据集的时间点快照,就是把某一刻的数据和状态以文件的形式写到磁盘上。这个快照文件称为RDB文件(dump.rdb)。
自动触发
Redis7版本,按照redis.conf里配置的save触发,表示在seconds时间内发生changes次变化时触发保存。(执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义)
save <seconds> <changes>
save "" 禁用快照
指定快照文件保存位置
指定rdb文件名字
如何恢复:将备份文件,即dump.rdb移动到redis安装目录并启动服务即可
手动触发
使用save或bgsave命令。
但save命令会阻塞当前redis服务器直到持久化工作完成 ,不建议使用。
bgsave命令Redis会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。
lastsave用于查看上一次快照时间戳。
注意:产生的rdb备份最好与服务分机隔离,否则在redis清空数据库或关机时会产生一个rdb文件覆盖原来的备份文件 。
redis-check-rdb dump.rdb 用于检查修复 dump.rdb
redis.conf 文件 SNAPSHOTTING 模块主要配置参数
save <seconds> <changes> | 自动触发备份 |
dbfilename | 备份rdb文件名 |
dir | 备份文件保存位置 |
stop-writes-on-bgsave-error | 默认yes,如果配置成no,表示你不在乎数据不一致或者有其他的手段发现和控制这种不一致,那么在快照写入失败时,也能确保redis继续接受新的写请求。 |
rdbccompression | 默认yes,对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能。 |
rdbchecksum | 默认yes,在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。 |
rdb-del-sync-files | 在没有持久性的情况下删除复制中使用的RDB文件。默认情况下no,此选项是禁用的。 |
二、AOF
AOF(Append Only File):以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启后就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
默认情况下,redis没有开启AOF,开启需设置配置 appendonly yes,保存文件为appendonly.aof
AOF工作流程
三种写回策略
- always:同步写回,每个写命令执行完立刻同步地将日志写回磁盘
- everysec:每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘
- no:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
AOF重写
当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,或者可以手动使用 bgrewriteaof 命令。
该配置表示当前aof文件大小达到64mb,且相比于上一次重写aof大小增长了一倍,触发重写。
MP-AOF
Redis6之前只保存一个aof文件。Redis7之后采用MP-AOF(Multi Part AOF),将原来的单个AOF文件拆成多个AOF文件,有三种类型,分别为:
- BASE:表示基础AOF,它一般由子进程通过重写产生,该文件最多只有一个
- INCR:表示增量AOF,它一般会在AOFRW(AOF重写)开始执行时被创建,该文件可能存在多个
- HISTORY:表示历史AOF,它由BASE和INCR AOF变化而来,每次AOFRW成功完成时,本次AOFRW之前对应的BASE和INCR AOF都将变为HISTORY,HISTORY类型的AOF会被Redis自动删除
为了管理这些AOF文件,引入一个manifest(清单)文件来跟踪、管理这些AOF。同时,为了便于AOF备份和拷贝,将所有的AOF文件和manifest文件放入一个单独的文件目录中,目录名由appenddirname配置决定(文件路径为前文rdb配置的 dir + appenddirname) 。
三、RDB-AOF混合持久化
混合开启方式,将 aof-use-rdb-preamble 的值设置为yes。
RDB和AOF同时开启时,重启时只会加载aof文件,不会加载RDB文件。
RDB+AOF的混合方式---------> RDB镜像做全量持久化,AOF做增量持久化
先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式。