黑马程序员技术交流社区

标题: 【Redis持久化机制】 [打印本页]

作者: Cloudychen    时间: 2019-9-27 19:21
标题: 【Redis持久化机制】
Redis持久化机制

众所周知,Redis是一个内存数据库。但它与其它内存数据库(如memcache)等有一个很大的区别,就是Redis可以持久化到磁盘。有了持久化方案,Redis就可以对数据进行备份、恢复、复制。Redis提供了两种持久化方案:RDB和AOF。在Redis 4.0中,提供了一个新特性:两者的混合持久化。下面将介绍Redis的各种持久化方案的原理和配置。

RDB

  原理:

RDB持久化是通过快照方式来完成的。当达到触发条件时,Redis会自动将内存中所有数据以二进制方式生成一份副本并存储在硬盘上。

在配置文件可以配置当前配置的备份文件和目录,使用config命令也可以查看和设置

触发条件

RDB分为主动触发和被动触发。

主动触发指的是客户端执行save和bgsave命令会进行持久化。
执行save会使Redis处于阻塞状态,不会响应任何其他客户端发来的请求,直到RDB快照文件执行完毕,需要谨慎使用。
bgsave即background save,后台保存。当执行bgsave命令时,Redis会fork出一个子进程来执行快照操作。需要注意的是,在fork子进程的过程中,Redis是阻塞的。而当子进程创建完成后,Redis就可以继续响应客户端的请求了。

子进程创建完成以后,返回“Background saving started”。子进程根据主进程的内存副本创建临时快照文件,当快照文件完成以后对原快照文件进行替换。替换完成后,子进程发送信号给主进程完成快照操作,主进程更新统计信息(info Persistence可查看),子进程退出。
被动触发有好几种情况,下面分别介绍一下。
save m n规则触发
在指定的m秒内,Redis中有n个键发生改变,则自动触发bgsave。该规则默认在redis.conf中进行了配置,并且可组合使用,满足其中一个规则,则触发bgsave
比如save 900 1,表明当900秒内至少有1个键发生改变时候,Redis会触发bgsave操作。
flushall触发
flushall命令用于清空数据库,请慎用,当我们使用了则表明我们需要对数据进行清空,那Redis当然需要对快照文件也进行清空,所以会触发bgsave。
shutdown触发
Redis在关闭前处于安全角度将所有数据全部保存下来,以便下次启动会恢复。可以使用客户端连入执行shutdown命令,也可以直接使用脚本关闭Redis,都会在退出前先执行save。
shutdown命令还可以传递一个参数save/nosave。如果使用nosave参数,则不会进行持久化,直接退出。
主从复制触发
在Redis主从复制中,从节点执行全量复制操作,主节点会执行bgsave命令,并将rdb文件发送给从节点。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2