Redis03-RDB、RDB数据恢复
RDB、RDB数据恢复
RDB是什么
RDB是redis数据持久化的一种,它将当前进程数据生成快照,并写入RDB文件中,恢复时将快照文件直接读入内存
触发机制
RDB触发机制有手动和自动两种
如何手动触发RDB
1.通过在命令行输入save和bgsave来实现
2.save命令会阻塞当前Redis服务器,直到RDB过程完成为止,对于内存几十GB以上的实例会造成长时间阻塞,线上环境不建议使用
3.bgsave命令会使Redis进程执行fork操作,创建子进程,快照由子进程负责生成。阻塞只发生在fork阶段,时间很短
当redis存储的数据量达到几十GB并且空闲内存不多时,或者运行在虚拟机时,执行BGSAVE可能会造成长时间的系统停顿(fork创建子进程的时间变长了),手动触发的好处在于时间可控,SAVE由于没有创建子进程的过程在生成大快照时会比BGSAVE快
以下场景将自动触发RDB持久化机制
1.使用save相关配置,如 'save m n' 表示m秒之内数据集存在n次修改时,自动触发bgsave
2.主从环境下,从节点连接主节点时,主节点自动执行bgsave生成RDB文件并发送给从节点
3.执行debug reload命令重新加载Redis时,也会自动触发save操作
4.默认情况下执行shutdown命令关闭redis服务器时,如果没有开启AOF持久化功能则自动执行bgsave
BGSAVE执行流程
1.执行bgsave命令,Redis父进程判断当前是否存在正在执行的RDB或AOF子进程,不存在就执行,如果存在直接返回。
2.如果没有子进程,父进程执行fork操作创建子进程,fork操作过程中阻塞父进程
3.父进程完成fork操作后,可以继续响应其他命令。
4.子进程创建RDB文件,根据父进程内存生成快照文件,完成后对原有文件进行原子替换
5.进程发送信号给父进程表示完成,父进程更新统计信息
RDB文件处理,RDB文件为啥这么小?
保存
1.配置文件中的dir和dbfilename分别表示RDB文件的存储目录和文件名
2.可以通过执行config set dir/dbfilename newdir/newfilename在运行期间动态修改,下次运行持久化时RDB文件会保存到新目录
压缩
Redis默认采用LZF算法对生成的RDB文件做压缩处理,压缩后的文件远远小于内存大小
可以通过config set rdbcompression {yes|no}动态修改,默认开启
校验
可以通过redis-check-dump工具检测损坏RDB文件并获取对应的错误报告
自动触发
自动通过配置文件/etc/redis/redis.conf来实现
相关配置参数
/etc/redis/redis.conf
dbfilename “dump.rdb” // 指定存放数据的文件名
save 900 1 // 900秒内且有1次修改
save 300 10 // 300秒内且有10次修改
save 60 10000 // 60秒内且有10000修改
自动配置的其他选项
存储到磁盘中的快照是否压缩
rdbcompression yes|no
在存储快照后,使用crc16算法做数据校验,有10%的性能消耗
rdbchecksum yes|no
当启用了RDB且最后一次保存数据失败,Redis是否停止接收数据,一般为no
stop-write-on-bgsave-error yes|no
rdb的禁用启动
禁用
slave ""
#save 900 1
#save 300 10
#save 60 10000
启用
#salve ""
save 900 1
save 300 10
save 60 10000
RDB优缺点
RDB优点:
1.由子进程来执行持久化,过程中主进程不做任何IO操作,比较适合大规模数据恢复,且对数据完整性要求不是非常高的场合
2.RDB的数据恢复速度比AOF快
RDB的缺点:
1.RDB无法做到秒级别的持久化,因为不能每秒执行fork操纵,频繁执行成本太高
2.意外宕机时,最后一次持久化的数据会丢
3.RDB文件采用特定的二进制格式保存,存在旧版redis不支持新版RDB的格式的问题
使用RDB文件恢复数据
执行rdb持久化命令后,会在 redis 安装目录中创建dump.rdb文件。如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)