Redis持久化

本文探讨了Redis内存数据的持久化需求,介绍了RDB和AOF两种持久化方式的工作原理、使用场景、优缺点,以及Redis7中的新特性。
摘要由CSDN通过智能技术生成

为什么需要Redis持久化?

redis的数据是存储在内存上的,而设备发生断电等故障的时候内存上的数据会消失,写入磁盘的数据不会受到断电的影响,因此我们需要将redis的数据持久化到磁盘上

redis官方提供了rdb(redis database),aof(append only file)两种持久化方式

rdb类似于我们虚拟机的快照,将某一时刻的数据和状态以文件的方式保存,aof则是将每一条写操作记录到一个文件中

rdb

什么是rdb

一句话说就是在指定的时间间隔,执行数据集的时间点快照,把数据和状态以快照文件的方式保存到磁盘,这个快照文件就是rdb文件

rdb备份文件是全量备份,每次备份将整个数据库的数据都进行备份

如何使用rdb

rdb分为自动触发手动触发两种方式

自动触发

从redis配置文件中可以看到redis自动触发rdb备份的条件:

  1. 1小时内发生至少一次键变化
  2. 5分钟内发生至少100次键变化
  3. 1分钟内发生至少10000次键变化

把433行的#号去掉即开启rdb自动触发,其中的数值可以按需修改

同样的,我们可以在配置文件中设置rdb文件的保存路径以及rdb文件的名称

手动触发

redis提供了两种命令来手动生成rdb文件,分别为save和bgsave

两种都可以保存数据,区别在于save是阻塞的,而bgsave是非阻塞

save会导致redis服务器无法响应其他请求,必须等待数据备份成功了才能解除阻塞

bgsave会fork一个子进程,通过子进程去备份redis的数据,在后台完成备份,允许主进程修改数据

因此在生产环境中不要使用save命令

恢复数据

当我们flushdb/flushall清空了redis数据的时候应该如何将数据恢复?

首先我们需要明确的是当我们使用flushdb/flushall命令的时候我们的rdb会和我们的最新状态保持一致,也就是说rdb文件也是空的,如果我们没有事先保存rdb文件的备份或者aof文件的话,那就是寄了

如果有事先保存rdb文件备份,那么将该文件放到redis安装路径下,在下一次重启的时候,redis会自动读取rdb的数据,数据将自动恢复

禁用rdb

  1. 在配置文件中启用save ""
  2. 执行命令redis-cli config set save ""

rdb的优缺点

优点

  1. 适合大规模的数据恢复
  2. 可以按照业务定时备份
  3. 适合对数据完整性和一致性要求不高的
  4. 在内存中加载速度比aof快
  5. 提高redis的性能

 缺点

  1.  快照之间会丢失数据(有部分数据会因为没达到自动触发rdb的条件而丢失)
  2. 数据量太大时全量备份会使用大量I/O影响服务器性能
  3. 数据量大的时候fork可能会导致服务请求的瞬间延迟,因为fork会将内存数据克隆

什么情况会触发rdb快照

  1. 配置文件中设置的自动触发条件
  2. 手动save/bgsave
  3. 执行flushall/flushdb命令生成空的rdb文件
  4. 执行shutdown且没有设置aof持久化
  5. 主从复制时,主节点自动触发

 aof

什么是aof

aof就是以日志的形式来记录每一个写操作,将redis执行过的所有写操作记录下来保存为aof文件

数据恢复时redis从头开始执行aof文件中的每一条指令以完成数据恢复工作

使用aof需要在配置文件中将appendonly 改为yes,默认不开启aof

aof缓冲区写回策略

为避免频繁的I/O,aof引入了缓冲区,何时将缓冲区的数据写入到文件中自然涉及到我们的写回策略

写回策略分三种:always,everysec,no,看名字就能知道是什么意思

在配置文件中可以设置启用哪种写回策略

 redis7中aof的新特性

redis7中aof采用了multi part aof的设计方式,将原来的一个aof文件拆分成base,incr,history三个部分

拆分出来的文件将存放在aof目录下,这个目录和rdb文件在同一级目录中

同时我们可以通过配置文件修改aof文件目录名以及保存路径

aof的优缺点

优点

 性能高,可做紧急修复,更好地保护数据不丢失

缺点

文件大,恢复速度慢于rdb,运行效率慢于rdb,每秒同步策略效率较好,不同步时效率和rdb相同

aof重写机制

当aof文件达到一定大小时就会触发redis的重写机制,将aof压缩成可以恢复数据的最小指令集

举个例子:

set k1 v1

set k1 v2

set k1 v3...

当文件达到一定大小时,文件只会保留最后一条有用的指令set k1 v3,其他无用指令统统删除

重写机制分为自动触发手动触发

自动触发

当满足上面两个条件时系统将会自动重写aof文件,且重写过程是由子进程进行的,重写完成后aof文件的序号将会改变,base存储最小的指令集,incr文件继续记录每一条指令,manifest不会改变

这里的旧aof可以理解为incr1,新aof可以理解为incr2 

手动触发 

执行命令 bgrewriteaof

rdb-aof混合持久化

当磁盘中同时存在rdb和aof文件,系统会优先读取aof文件来恢复数据

rdb适合用来备份数据库 

 一旦使用了混合模式,重启服务时将从rdb和aof两部分来恢复数据:rdb快照+aof记录的快照后产生的数据

纯缓存模式

同时关闭rdb和aof

在配置文件中设置save "" 和 appendonly no 

  • 27
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值