Redis持久化——RDB快照
介绍
我们知道Redis是运行在内存中的数据库,那么当我们关闭Redis服务器后,内存中的数据会不会丢失?
当然是不会!因为Redis有持久化机制,所谓持久化,就是将内存中的数据保存到磁盘文件上,以此来达到永久保存数据的目的。
在Redis中,有两种持久化机制:
- RDB持久化
- AOF持久化
RDB持久化又叫做RDB快照,简单点说,RDB快照就是记录Redis中此刻这一瞬间的数据到文件中,“对Redis内存数据进行一次抓拍”。
RDB快照既可以手动执行,也可以自动定期执行,将此刻时间点上的数据库状态保存到一个RDB文件中。
手动执行
有两个Redis命令可以用于生成RDB文件:
SAVE
命令BGSAVE
命令
生成的RDB文件就是执行命令此刻的数据库状态
我们知道,Redis服务器是单进程(单线程)的,这两个命令的区别在于:- 当执行
SAVE
命令时,会阻塞Redis服务进程,直到RDB文件生成完毕,在此期间,Redis不会处理任何请求。 - 而
BGSAVE
命令不会阻塞服务器进程,而是先派生出一个子进程,由子进程来负责生成此刻的RDB文件,服务器进程可以继续处理请求。
自动定期执行
Redis允许我们通过配置选项,来每隔一段时间自动执行一次BGSAVE
命令
例如,我们在配置文件中给出参数:
save 900 1
这个配置意思是:服务器在900秒内,对数据库至少进行了1次修改,之后就会自动执行BGSAVE
命令。
我们还可以同时给出多个条件:
save 900 1 save 300 10 save 60 10000
满足以上条件之一,就会自动执行BGSAVE
命令:
- 900 秒之内,对数据库进行了至少 1 次修改;
- 300 秒之内,对数据库进行了至少 10 次修改;
- 60 秒之内,对数据库进行了至少 10000 次修改
RDB文件的载入
RDB文件的载入是在服务器启动时自动完成的,Redis中没有专门用于载入RDB文件的命令。
在服务器启动时,如果检测到RDB文件存在,那么就会自动载入RDB文件,内存中的数据就会恢复
注意:
- 如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF日志来还原数据库状态
- 只有在AOF持久化功能关闭的状态下,服务器才会使用RDB文件来还原数据库状态
参考文章
- 《Redis设计与实现》
- RDB 快照是怎么实现的? | 小林coding
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现