Redis持久化机制之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。
- 点赞
- 收藏
- 关注作者
评论(0)