Redis持久化之RDB

76 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

一、RDB

1.RDB启动方式 —— save指令

  • 命令
save
  • 作用

手动执行一次保存操作

2.RDB启动方式 —— save指令相关配置

  • dbfilename dump.rdb

说明:设置本地数据库文件名,默认值为 dump.rdb

经验:通常设置为dump-端口号.rdb

  • dir

说明:设置存储.rdb文件的路径

经验:通常设置成存储空间较大的目录中,目录名称data

  • rdbcompression yes

说明:设置存储至本地数据库时是否压缩数据,默认为 yes,采用 LZF 压缩

经验:通常默认为开启状态,如果设置为no,可以节省 CPU 运行时间,但会使存储的文件变大(巨大)

  • rdbchecksum yes

说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行

经验:通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存储一定的数据损坏风险

3.RDB启动方式 —— bgsave指令

  • 命令
bgsave
  • 作用

手动启动后台保存操作,但不是立即执行

注意: bgsave命令是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用。

4.RDB启动方式 —— bgsave指令相关配置

  • stop-writes-on-bgsave-error yes

说明:后台存储过程中如果出现错误现象,是否停止保存操作

经验:通常默认为开启状态

5.RDB启动方式 ——save配置

  • 配置
save second changes
  • 作用

满足限定时间范围内key的变化数量达到指定数量即进行持久化

  • 参数

second:监控时间范围

changes:监控key的变化量

  • 位置

在conf文件中进行配置

  • 范例
save 900 1

save 300 10

save 60 10000

注意: save配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的

save配置中对于second与changes设置通常具有互补对应关系,尽量不要设置成包含性关系

save配置启动后执行的是bgsave操作

6.RDB三种启动方式对比

image.png

7.RDB优点

  • RDB是一个紧凑压缩的二进制文件,存储效率较高

  • RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景

  • RDB恢复数据的速度要比AOF快很多

  • 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复。

8.Rdb缺点

  • RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据

  • bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能

  • Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象