文章目录
1. 持久化的作用
- 概述:Redis数据保存在内存中,但是会异步的同步到磁盘中,保证数据的持久化;
- 持久化方式
2. RDB方式
1. 基础概述
- 把存储在内存中数据,生成快照持久化到硬盘中;当redis重启时,再从RDB文件中把数据加载到内存中。
2. 触发RDB的三种方式
save
(同步):会阻塞后面执行的命令,直到生成快照结束。- 是一个阻塞的命令。
- 当生成快照成功之后,会替换旧的快照。
bgsave
(异步):执行了此命令立刻返回,再另外的子进程中生成快照;- 是一个阻塞的命令,阻塞发送在创建子进程的过程中。
- 当生成快照成功之后,会替换旧的快照。
自动
:根据一定的规则,自动生成快照文件。- 根据redis的配置文件设置,在多少秒内修改了多少数据,而生成RDB文件。
- 符合条件之后,也是使用的
bgsave
命令来生成RDB。
3. 其它会,触发RDB的三种方式
- 全量复制:使用主从节点的时候,主节点会生成RDB文件,把文件发送给从节点,进行数据之间的同步。
- debug reload:debug的重启,不会清空内存中的数据,但是,会生成RDB文件。
- shutdown:使用shutdown命令或者直接关机的时候,会生成RDB文件,防止数据的丢失。
4. RDB配置,最佳实践
5. RDB缺点
- 耗时,耗性能;
- O(n)的数据:耗时;
- fork():消耗内存,但是Redis底层进行数据处理时,采用了
copy-on-write
策略; - Disk I/O:IO性能。
- 不可控,可能会丢失数据
- 因为不管使用哪种方式,都可能在再次备份RDB的时候,突然宕机,就会导致数据丢失。
3. AOF方式
1. 基础概述
- AOF主要记录的就是,每次client端发送到服务器执行的命令;当服务器重启的时候,会读取AOF文件,reload数据。
2. 配置AOF执行的三种策略
always
:把命令写入到缓冲区中,然后每条命令
都实时保存到AOF文件中。everysec
:把命令写入到缓冲区中,然后每秒
把命令保存到AOF文件中。no
:根据OS来判断什么时候,刷新到AOF文件中。
3. AOF重写
-
就是把一些重复的,过期的,可被优化的指令存入到AOF文件中。
-
AOF重写的作用
- 减少硬盘占用量:指令更少;
- 加快恢复速度:因为需要执行的指令更少。
- 重写方式
bgrewriteaof
命令- 重写配置。
-
AOF重写配置
-
AOF流程
-
AOF正确配置