介绍
:::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文件保存的路径
原理
:::tips
RDB原理
bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件,fork采用的是copy-on-write技术:
- 当主进程执行读操作时,访问共享内存
- 当主进程执行写操作时,则会拷贝一份数据,执行写操作
RDB的bgsave基本流程
- fork主进程得到一个子进程,共享内存空间
- 子进程读取内存数据并写入新的RDB文件
- 用新RDB文件替换旧的RDB文件
RDB的执行时机
- 执行save命令
- 执行bgsave命令
- Redis服务正常停止时会执行一次bgsave命令
- 满足触发条件
RDB的缺点
- RDB执行间隔时间长,在两次RDB之间写入的数据有丢失的风险
- fork子进程、压缩、写出RDB文件都比较耗时 :::