💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
`RDB`全称为:`Redis DataBase`,是`Redis`当中默认的持久化方案。当触发持久化条件时,`Redis`默认会生成一个`dump.rdb`文件,`Redis`在重启的时候就会通过解析`dump.rdb`文件进行数据恢复。 #### RDB 机制触发条件 `RDB`持久化机制有两种触发方式:自动触发和手动触发。 #### 自动触发 自动触发方式也可以分为三种: * 执行`flushall`命令(`flushdb`命令不会触发)时,不过此时生成的`dump`文件内的数据是空的(`dump`文件还会存储一些头信息,所以文件本身是有内容的,只是没有数据),没有什么太大的实际意义。 * 执行`shutdown`命令时会触发生成`dump`文件。 * 通过配置文件自动生成,`Redis`中配置文件默认配置如下。 ~~~ save 900 1 #900秒内至少有1个key被添加或者更新 save 300 10 #300秒内至少有10个key被添加或者更新 save 60 10000 #60秒内至少有10000个key被添加或者更新 ~~~ 只要达到这三个条件中的任意一个,就会触发`Redis`的`RDB`持久化机制。 #### 手动触发 除了自动触发,`Redis`中还提供了`2`个手动触发`RDB`机制的命令(这两个命令不能同时被执行,一旦一个命令正在执行中,另一个命令会被拒绝执行): * `save`:这个命令会阻塞`Redis`服务器进程,直到成功创建`RDB`文件,也就是说在生成`RDB`文件之前,服务器不能处理客户端发送的任何命令。 * `bgsave`:父进程会执行`fork`操作来创建一个子进程。`RDB`文件由子进程来负责生成,父进程可以正常处理客户端发送的命令(这也是`Redis`不仅仅只是单线程的一个体现)。 如果想要知道上一次成功执行`save`或者`bgsave`命令的时间,可以执行`lastsave`命令进行查看,`lastsave`命令返回的是一个`unix`时间戳。 #### RDB 机制相关配置文件 除了上面提到的触发生成`rdb`文件的配置参数,`RDB`持久化机制还有如下一些相关命令: * `dir`:`rdb`文件生成目录。默认是`./`(当前安装目录),可以执行命令`config get dir`进行查看,如下图所示说明当前`dump`文件生成目录为`/home/project`: ![](https://img.kancloud.cn/68/eb/68eb39acfd4281526d22b1737717011a_402x84.png) * `dbfilename`:`rdb`文件名。默认是`dump.rdb`。 * `rdbcompression`:`rdb`文件是否是`LZF`压缩文件。默认是`yes`。 * `rdbchecksum`:是否开启数据校验。默认是`yes`。 #### RDB 机制优点 * `RDB`是一个非常紧凑的压缩文件,保存了不同时间点上的文件,非常适合用来灾备和数据恢复。 * `RDB`最大限度地提高了`Redis`的性能,因为`Redis`父进程需要做的唯一的工作就是派生一个子进程来完成剩下的工作,父进程永远不会执行磁盘`I/O`或类似的耗时操作。 * 与后面介绍的`AOF`持久化机制比较,`RDB`方式恢复数据的速度更快。 #### RDB 机制缺点 * `RDB`无法做到实时备份,所以如果`Redis`因异常停止工作而没有正确的关机,那么从上一次备份到异常宕机的这一段时间的数据将会丢失。 * `RDB`通常需要父进程来执行`fork`操作创建子线程,所以如果频繁执行`fork`操作而`CPU`性能又不是很高的话可能会造成短时间内父进程不可用。