Redis的RDB持久化机制

举报
别团等shy哥发育 发表于 2023/02/04 11:41:18 2023/02/04
【摘要】 1、RDB简介  在基于RDB的持久化机制里会定时把Redis内存数据以快照的方式保存到硬盘上,而在必要的时候就可以通过快照文件来恢复数据。 2、备份是如何执行的?  Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需...

1、RDB简介

  在基于RDB的持久化机制里会定时把Redis内存数据以快照的方式保存到硬盘上,而在必要的时候就可以通过快照文件来恢复数据。

2、备份是如何执行的?

  Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。

3、Fork

  • Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程
  • 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,Linux中引入了“写时复制技术”
  • 一般情况父进程和子进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

4、RDB持久化流程

在这里插入图片描述

5、dump.rdb文件

在redis.conf中配置文件名称,默认为dump.rdb
在这里插入图片描述

6、配置快照位置

rdb文件的保存路径,也可以修改。默认为Redis启动时命令行所在的目录下
在这里插入图片描述

7、如何触发RDB快照,保持策略

7.1 配置文件中默认的快照配置

在这里插入图片描述
上述save 600 1表示当在600秒内有1个或1个以上的键被修改时就会生成快照。其他两行以此类推。

7.2 save和bgsave命令

在基于RDB的持久化机制中,除了可以在配置文件里定义触发持久化的条件外,还可以通过save和bgsave这两个命令触发持久化,即把当前内存里的数据写入RDB持久化文件中。
save :save时只管保存,其它不管,全部阻塞。手动保存。不建议。
bgsave:Redis会在后台异步进行快照操作, 快照同时还可以响应客户端请求。
可以通过lastsave 命令获取最后一次成功执行快照的时间

7.3 flushall命令

执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义

7.4 RDB持久化相关配置

  • stop-writes-on-bgsave-error:该参数默认是yes,表示当执行bgsave持久化命令时如果有错误,Redis服务器会终止写入操作。如果取值是no,那么即使出现错误也会继续写入。
  • rdbccompression:该参数默认是yes,表示在持久化时会压缩文件。
  • rdbcchecksum:该参数默认是yes,表示在用RDB快照文件进行数据恢复时开启对快照文件的校验。如果设置为no,就无法确保快照文件的正确性。

8、RDB备份实战

设置值
在这里插入图片描述
查看dump.rdb
在这里插入图片描述
模拟断电,直接shutdown
在这里插入图片描述
再重新登入redis,查看是否触发备份
在这里插入图片描述
可以看到,快照已经恢复了数据。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。