介绍

:::tips RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照,简单来说就是把内存中的所有数据都记录到磁盘中,当Redis实例故障重启后,从磁盘读取快照文件来恢复数据,快照文件就被称为RDB文件,默认是保存在Redis当前运行的目录

RDB持久化在四种情况下会执行:

  • 执行save命令
  • 执行bgsave命令
  • Redis正常停止时
  • 触发RDB条件时 :::

    save命令

    :::tips 在Redis客户端中执行save命令,会立即使用主进程进行RDB持久化,这个过程中其它所有命令都会被阻塞,这个命令只有在数据迁移时可能用到 :::

    bgsave命令

    :::tips 在Redis客户端中执行bgsave命令,会开启一个子进程来进行RDB持久化,主进程还可以执行其他命令,不受影响 :::

    正常停止

    :::tips Redis在正常停止时会执行一次save命令,实现RDB持久化 :::

    触发RDB条件

    :::tips Redis内部有触发RDB的机制,在redis.conf文件中可以自定义配置 ::: ```bash

    根据触发条件执行bgsave

    save “”表示禁用RDB

    save 900 1 save 300 10 save 60 10000

是否开启RDB文件压缩,建议关闭,压缩会消耗cpu

rdbcompression no

设置RDB文件名称

dbfilename dump.rdb

设置RDB文件保存的路径

dir ./ ```

原理

:::tips RDB原理
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件,fork采用的是copy-on-write技术:

  • 当主进程执行读操作时,访问共享内存
  • 当主进程执行写操作时,则会拷贝一份数据,执行写操作

image.png

RDB的bgsave基本流程

  • fork主进程得到一个子进程,共享内存空间
  • 子进程读取内存数据并写入新的RDB文件
  • 用新RDB文件替换旧的RDB文件

RDB的执行时机

  • 执行save命令
  • 执行bgsave命令
  • Redis服务正常停止时会执行一次bgsave命令
  • 满足触发条件

RDB的缺点

  • RDB执行间隔时间长,在两次RDB之间写入的数据有丢失的风险
  • fork子进程、压缩、写出RDB文件都比较耗时 :::