一、Redis持久化
- 持久化就是为了把Redis内存中的数据持久化保存到硬盘中,防止数据的丢失
-
Redis提供了两种持久化方式
二、RDB持久化
触发方式
-
RDB持久化的触发有两种方式:手动触发与自动触发
-
手动触发:
- 通过执行save命令或者bgsave命令
- save命令已经启用了,因为save会将当前Redis服务器阻塞,直到RDB文件创建完成之后才返回
- bgsave会派生一个子进程去进行RDB的持久化,因为不会阻塞Redis服务器的主进程
-
自动触发:
- 通过在Redis配置文件中配置save选项,Redis会根据save选项的值每个一段时间执行一次bgsave命令来进行持久化
- save选项可以设置多个,只要有一个条件满足,那么就会进行RDB持久化
- 例如,下图中我们设置了3个save选项,只要满足下面三个条件中的其中一个,bgsave命令就会被执行:
- 服务器在3600秒之内,对数据库进行了至少1次修改
- 服务器在300秒之内,对数据库进行了至少100次修改
- 服务器在60秒之内,对数据库进行了至少10000次修改

-
RDB文件的载入:
- 当第一次启动Redis的时候,只要检测到RDB文件存在,那么Redis就会自动载入RDB文件(但是收到AOF的影响,见下面介绍)
- 当Redis在载入RDB文件的时候,Redis服务器会一直处于阻塞状态,直到载入工作完成
-
AOF持久化对RDB持久化的影响:如果Redis开启了AOF持久化,那么Redis就会优先使用AOF来还原数据库状态,这样就不会使用RDB文件了
-
RDB文件的优点:
- Redis加载RDB恢复数据远远快于AOF的方式
-
RDB是一个紧凑压缩的二进制文件,代表Redis在某个时间点上的数据快照。非常适用于备份,全量复制等场景。比如每6小时执行bgsave备份, 并把RDB文件拷贝到远程机器或者文件系统中(如hdfs),用于灾难恢复
-
RDB文件的缺点:
-
RDB方式数据没办法做到实时持久化/秒级持久化。因为bgsave每次运 行都要执行fork操作创建子进程,属于重量级操作,频繁执行成本过高
- RDB文件使用特定二进制格式保存,Redis版本演进过程中有多个格式的RDB版本,存在老版本Redis服务无法兼容新版RDB格式的问题
三、AOF持久化
工作流程
-
AOF持久化大致分为4个过程:
-
命令写入:Redis服务器每执行一条写命令,就会把这条写命令以“Redis协议(RESP协议)的格式”将这条命令追加到aof_buf缓冲区
-
文件同步:AOF缓冲区根据对应的策略向硬盘做同步操作
-
文件重写:随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的
-
重启加载:当Redis服务器重启时,可以加载AOF文件进行数据恢复

相关文章: