3 redis持久化

一 分类

RDB和AOF

二 RDB

RDB是把内存中的数据以快照形式存储到磁盘中,一般是每隔一段时间以全量复制方式进行存储。
触发机制:手动触发、自动触发。

1 触发机制

1)手动触发
a save命令
已废弃。执行save命令时,会阻塞redis直到rdb持久化完成。 当内存数据量较大时,阻塞时间较长,线上环境不允许使用save命令。

b bgsave命令
推荐使用此方式。 执行bgsave命令时,会执行fork操作开启一个子进程来异步rdb持久化数据。阻塞只发生在fork创建,时间很快。

2)自动机制
场景如下:
a 当使用save配置,save m n 表示m秒存在n次修改则自动触发bgsave命令
b 默认情况下执行shutdown命令,如果没有开启AOF,会自动执行bgsave命令

2 运作流程

1)执行bgsave命令先检查是否有其他子进程在执行,例如rdb、aop持久化子进程, 有的话就执行返回;
2)父进程进行阻塞,执行fork操作,创建一个子进程用来异步rdb持久化数据到磁盘;
3)fork操作完成后,父进程可以继续响应其他命令;
4)子进程生成完rdb文件后会通知父进程。
3 redis持久化

3 rdb文件处理

1)保存
默认就是开启的
rdb文件保存位置: 通过dir配置设置
rdb文件名设置: 通过dbfilename配置设置

动态切换rdb文件目录,修改新rdb文件名:
config set dir {newDir}
config set dbfilename {newFileName}
使用场景:当磁盘损坏、磁盘满了,可以通过上面2个命令切换rdb目录

2)压缩
rdb默认会压缩持久化文件,减少空间占用,方便保存到磁盘或发送给从节点,建议线上开启。

4 优缺点

1)优点
全量复制,适用于灾备
rdb文件恢复速度比aop快

2)缺点
不能实时存储, 因fork操作是重量级操作,一般一段时间才执行1次。 实时存储还需要开启AOF。

三 AOF

使用独立的日志进行实时存储写操作,数据恢复时,从日志中重新执行写命令达到恢复的目的。

1 使用AOF

开启aof配置:appendonly yes 默认是不开启的
aof文件保存位置:和rdb文件一样,通过dir配置设置
aof文件名设置:通过appendfilename配置设置

工作流程:
1)写操作先写入到aof内存缓存中;
2)异步的加载数据到aof文件中;
3)当aof文件较大时,通过重命名文件名达到压缩的目的;
4)重启时,通过从aof文件重新加载写操作,进行数据恢复;

3 redis持久化