目录
一、RDB 定期备份
1.2 触发方式
1.2.1 手动触发
1.2.2.1 自动触发 RDB 持久化机制的场景
1.2.2.2 检查是否触发
1.2.2.3 线上运维配置
1.3 检索工具
1.4 RDB 备份实现原理
1.5 禁用 RDB 快照
1.6 RDB 优缺点分析
二、AOF 实时备份
2.1 配置文件解析
2.2 开启 AOF
2.3 持久化原理解析
2.3.1 AOF 写回策略
2.3.2 重写策略
三、RDB-AOF混合持久化
3.1 RDB-AOF混合持久化
Redis 支持 RDB 和 AOF 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 Redis是一个内存数据库(把数据存储到内存中--->效率高)。要想做到持久化存储,就需要让Redis把数据存储到硬盘上。当查询某个数据时,直接从内存中存取。当 Redis 重启后,通过读取硬盘的数据恢复内存中的数据。 |
一、RDB 定期备份
RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB 文件,默认是保存在当前运行目录(dump.rdb)。RDB定期把 Redis 内存中的所有数据,都写入硬盘中形成一个“快照”。Redis给内存中当前存储的数据,赶快拍个照片,生成一个文件存储在硬盘中。后续Redis一旦重启后,就可以根据刚才的“快照”把内存中的数据恢复回来。
1.1 配置文件解析
Redis 7 之前的配置:
- Save 900 1 :每隔 900s(15分),如果有超过 1 个 key 发生了变化,就写一份新的RDB文件
- Save 300 10:每隔 900s(5分),如果有超过 10 个 key 发生了变化,就写一份新的RDB文件
- Save 60 10000:每隔 60s(1分),如果有超过 10000 个key发生了变化,就写一份新的RDB文件
Redis7 的配置:
- Save 3600 1 :每隔 3600s(1小时),如果有超过 1 个 key 发生了变化,就写一份新的RDB文件
- Save 300 100:每隔 300s(5分),如果有超过 100 个 key 发生了变化,就写一份新的RDB文件
- Save 60 10000:每隔 60s(1分),如果有超过 10000 个key发生了变化,就写一份新的RDB文件
1.2 触发方式
1.2.1 手动触发
1. save:执行save的时候,主程序会阻塞当前 Redis 服务器,直到持久化工作完成。执行 save 命令期间,Redis 不能处理其他命令,对于内存比较大的实例会造成长时间阻塞,线上禁止使用。运行 save 命令对应的 Redis 日志如下:
2. bgsave:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。由于这个过程是子进程在后台完成,这就允许主进程同时进行数据的修改。此时进行的复制过程性能开销其实是挺小的。因为fork在进行内存拷贝的时候,是通过“写时拷贝”的机制完成的。
1. 执行 bgsave 命令,Redis 父进程判断当前是否存在正在执行的子进程,如 RDB/AOF 子进程,如果存在 bgsave 命令直接返回。
2. 父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒。
3. 父进程fork完成后,bgsave命令返回“Background saving started(表示子进程开始执行RDB备份)”信息并不再阻塞父进程,可以继续响应其他命令。
4. 子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。执行 lastsave 命令可以获取最后一次生成RDB 的时间,对应 info 统计的 rdb_last_save_time 选项。
5. 进程发送信号给父进程表示完成,父进程更新统计信息,具体见info Persistence下的rdb_*相关选项。info Persistence
显然bgsave命令是针对save阻塞问题做的优化。因此Redis内部所有的涉及RDB的操作都采用bgsave的方式,而save命令已经废弃。
1.2.2 自动触发
按照 redis.conf 里配置的进行修改,让 Redis 每隔多长时间/每产生多少次修改就触发。Redis 生成的 rdb 文件是存放在 Redis 的工作目录中的,也是在Redis配置文件中,进行设置的。由于生成一次 RDB 操作是一个比较高的成本,不能让这个操作执行的太频繁。但是正因为生成的不太频繁,实际当前的数据和快照的数据可能存在一些偏差。
“save m n”。表示m秒内数据集存在 n 次修改时,自动触发 bgsave。
修改配置文件后,我们一定要重新启动服务器才能生效。然后根据我们的设置触发备份的条件触发。将备份文件(dump.rdb)移动到Redis安装目录并启动服务即可。重新启动后,Redis服务器会尝试加载RDB文件的内容,恢复了内存中之前的内容。如果发现格式错误,就可能会加载数据失败。
注意: |