Redis如何备份与恢复数据

1 数据持久化

Redis有自己的持久化机制,以防宕机后内存中的数据丢失。当宕机后,便从磁盘恢复内存数据结构。

1.1 快照

Redis是使用COW机制实现快照持久化。

  • 第一步:Redis可以fork出一个子进程,子进程与父进行共享内存中的数据页面,由子进程完成快照持久化任务。
  • 第二步:子进程处理的是产出时那一瞬间的数据,它不会修改现有的内存数据结构,只是对数据结构进行遍历读取,然后序列化写入磁盘中。
  • 第三步:在子进程进行快照持久化的过程中,父进程可能会修改数据,但是会先复制出一份数据页面,对这个复制的页面进行修改。

1.2 AOF

AOF日志记录了对Redis中数据的修改指令记录,可以通过重放的操作来恢复Redis中的数据结构。
AOF记录修改性指令过程:

  • 第一步:Redis接受客户端数据修改命令,先进行参数校验。
  • 第二步:将该指令存储到AOF日志中,即写入磁盘。
  • 第三步:执行对应的指令。

但是这会有一个问题,那就是AOF日志会随着Redis的长期运行而变得越来越长,那么重放AOF日志会非常耗时,恢复Redis将需要漫长的时间。
Redis提供了对AOF日志重写的机制:

  • 第一步:生成一个子进程,对当前Redis内存中的数据结构进行遍历,转换成一系列的操作指令并序列化到一个新的AOF日志文件中。
  • 第二步:将操作期间的增量AOF日志追加到新的AOF日志中。
  • 第三步:用新的AOF日志替换旧的AOF日志。

1.3 混合持久化

通常而言,快照和AOF各有弊端,比如使用快照会丢失数据,使用AOF性能很低,所以我们一般是将二者结合,混合持久化。

  • 第一步:Redis重启时,先加载快找中的内容。
  • 第二步:重放AOF日志,注意:这里的AOF日志是从快照持久化开始至今的日志,通常不大。

1.4 从节点持久化

一般而言,Redis的持久化操作是由从节点完成的,因为从节点没有来自于客户端的请求压力。但是我们需要注意如果从节点连接不上主节点,那么数据就会丢失,所以需要加强监控工作。

发布了8 篇原创文章 · 获赞 3 · 访问量 279

猜你喜欢

转载自blog.csdn.net/quanhong_ding/article/details/105528335