Redis之RDB持久化
1RDB持久化的概念
因为Redis数据库是一个内存数据库,一旦服务器进程退出,那么服务器中的数据库状态也会消失不见,为了解决这个问题,redis提供了RDB(Redis DataBase file)持久化功能。可以将redis中的数据库状态保存到磁盘中,避免数据的意外丢失。
2RDB文件的创建和载入
有两个Redis命令可以用于生成RDB文件,一个是SAVE,另一个是BGSAVE。
- SAVE会阻塞Redis服务进程,直到RDB文件完全创建完毕,在阻塞进程时服务器不能处理任何请求命令。
- BGSAVE则不同,它会派生出一个子进程,由子进程负责创建RDB文件,服务器进程则继续处理请求。
3自动间隔性保存
因为BGSAVE命令可以在不阻塞服务器进程的情况执行。用户可以通过设置save选项设置多个保存条件,比如
1 | save 900 1 /*900s内有一次保存*/ |
只要满足上述条件之一就会触发BGSAVE命令。检查保存条件是否满足的serverCron函数默认每隔100ms就会检测一次。
4重点回顾
- RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据。
- SAVE命令由服务器进程直接执行保存操作,该命令会阻塞服务器进程。
- BGSAVE命令由子进程执行保存操作,不会阻塞服务器进程。
- 服务器状态中会保存所有用save选项设置的保存条件,当任意一个保存条件被满足时,服务器会自动执行BGSAVE命令。
- RDB文件是一个经过压缩的二进制文件,由多个部分组成。
- 对于不同类型的键值对,RDB文件以不同的形式保存。
5RDB的缺陷
通过上述对RDB持久化的描述可以看出,RDB有他的不足之处,就是一旦数据库出现问题,由于RDB文件不是最新的,那么从RDB文件上一次自动保存到出现故障的这段时间内的数据就丢失了,所以RDB持久化不适用于对数据安全性要求极高的应用。