Redis持久化机制之RDB

举报
多米诺的古牌 发表于 2022/02/28 18:48:54 2022/02/28
【摘要】 1.Redis持久化机制Redis处理数据都是在内存里进行处理的,如果物理机出现突然宕机,进程就会被停止,进程中存储的数据就会全部丢失,这种情况肯定是需要进行处理的,因此必须有一种机制来保证Redis中的数据不会因为故障等客观因素而发生丢失,而这种机制就被称为Redis 的持久化机制。Redis的持久化机制有两种机制,第一种是RDB镜像快照,另一种是AOF日志的形式。2.RDB镜像快照RDB...

1.Redis持久化机制

Redis处理数据都是在内存里进行处理的,如果物理机出现突然宕机,进程就会被停止,进程中存储的数据就会全部丢失,这种情况肯定是需要进行处理的,因此必须有一种机制来保证Redis中的数据不会因为故障等客观因素而发生丢失,而这种机制就被称为Redis 的持久化机制。

Redis的持久化机制有两种机制,第一种是RDB镜像快照,另一种是AOF日志的形式。

2.RDB镜像快照

RDB持久化触发机制分为:阻塞式手动触发(通过save指令进行触发,比如在明确需要关机等操作的时候,手动save保存)、非阻塞式手动触发(通过bgsave指令进行触发)、配置文件自动触发(通过配置文件中给出的bgsave规则进行配置,eg:save 60 10000,此处虽然是save指令但是执行的是bgsave的形式)。

2.1 阻塞式手动触发机制

阻塞式手动触发机制顾名思义,指令是save,是将Redis进程进行阻塞(大家都别干活了,先让我操作完再说),存在的问题有,会影响到目前使用的redis功能,时点此时是正确的,但是在阻塞的这段时间内,最终生成的rdb文件是刚开始阻塞的时间时的数据。

2.2 非阻塞式手动触发机制

非阻塞式手动触发机制,即bgsave的形式,是使用copy on write的写时复制的内核机制(解决数据不隔离的问题)并且通过系统调用方法fork()(数据没有隔离,就是创建速度快,占用空间小),创建一个子进程,相当于复制一份当时的副本(里面只有虚拟地址和指向)。此时就会花很小的空间和快速的方式创建了副本,并且确保了此时的redis还能正常使用(可能在触发bgsave的时候会有删除修改等操作),输出bgsave指令的时间时候的数据就是最终生成rdb文件的数据,不会出现时点错误的情况(8点在生成文件,十分钟后创建完了,但在过程中修改了几笔数据,生成的文件就会不知道使用哪个时间对应的数据)。

2.3 配置文件自动触发

通过进入redis配置文件。执行指令是 vim etc/redis/6379.conf中找到save <seconds> <changes>配置项进行放开,seconds表示多长时间,changes表示多少次数,当同时满足<seconds>和 <changes>的时候会自动触发持久化操作,生成rdb文件,rdb文件生成会放入下图配置好的dir中文件名称也是配置好的dbfilename。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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