什么是Redis的持久化
我们知道Redis的数据都存储在内存中,如果服务器突然宕机,那么内存数据将会全部消失,为了防止这种情况出现,利用一套机制来保证数据不会因为故障而丢失,我们将这种机制称之为Redis的持久化机制,该机制主要目的是将内存数据存入到硬盘中
Redis 提供两种持久化机制RDB(Redis DataBase)和AOF(Append-Only File)机制。
RDB-快照
快照是最简单的Redis持久化模式,也就是生成某个时间点的数据集,生成RDB文件,可以看到RDB文件中的数据是非常紧凑的,所以在恢复数据的时候读取也是非常快的
触发RDB快照的方式有两种
手动触发
通过手动执行bgsave/save,显示触发生成快照
-
save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用
-
bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短
配置参数自动触发
自动触发有以下几种情况:
- 使用save相关配置,命令save m n。表示m秒内数据集存在n次修改时,自动触发bgsave
- 从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件发送给从节点
- 执行debug reload命令重新加载Redis时,自动触发save命令
- 执行shutdown命令时,如果没有开启AOF持久化功能自动执行bgsave
注意:在RDB持久化的过程中有两个问题需要考虑
- RDB快照过程中Redis是否会停止对外提供服务
- 如果没有停止服务,如何处理新的请求
针对上述问题我们先看一下RDB的持久化执行流程
根据上图我们可以看到主线程主要是fork一个子线程来进行持久化操作,同时父子线程会共享一个数据区域,而且该区域设置为read-only方式,该方式下读的时候没有问题,但是写的时候会触发copyonwrite机制来进行,接下来我们看看什么是 COW(Copy On Write) 机制 。
COW(Copy On Write) 机制
COW(Copy O