【Redis】持久化机制

一、三种持久化机制

  • RDF快照:通过某一时刻的快照,将数据以二进制形式永久存储在磁盘中。
  • AOF:将每个修改命令通过write函数追加到文件中。
  • 混合持久化:AOF重写时,将重写这一刻之前的内存做RDB快照存储,并将此刻以后增量的AOF文件写入新的AOF文件中。

【Redis】持久化机制_第1张图片

 二、RDB快照

(一)原理

  • Redis借助操作系统提供的写时复制技术(Copy-On-Write, COW)保存数据,此技术有两种方式:save(同步、阻塞)、bgsave(异步不阻塞)。
  • 原理:主线程fork出一条子线程,此子线程可以共享主线程内的所有数据。bgsave命令执行后,子线程读取主线程中的数据并写入到RDB文件中。此时,如果主线程正在执行“读”操作,则子线程继续写入;如果主线程正在执行“写”操作,子线程会复制一份正在执行“写”操作的数据,将数据写入RDB文件中。

(二)bgsave写时复制原理

【Redis】持久化机制_第2张图片

 三、AOF

        AOF方式持久化会将每一条修改指令追加到appendonly.aof文件中,每隔一段时间fsync到磁盘。

aof功能的三种策略配置(默认策略时:appendfsync everysec

  • appendfsync always: 每次有新命令都追加到AOF文件中,并在此时执行一次fsync,非常慢也非常安全。
  • appendfsync everysec: 每秒fsync一次,足够快,并且发生故障时至多丢失1秒的数据。
  • appendfsync no: 从不fsync,将数据交给操作系统来处理。更快也更不安全的选择。

四、RDB和AOF的对比

命 令

RDB

AOF

启动优先级

体 积

恢复速度

数据安全性

容易丢失数据

根据策略决定

注:两者可以都启用。Redis启动时如果既有rdb文件又有aof文件则优先选择aof文件恢复数据,因为aof一般来说数据更安全一点。

五、Redis的数据备份策略

  1. 写crontab定时任务调度脚本,每小时都copy一份aof的备份数据到一个目录中,保留最近48小时的备份;
  2. 每天都保留一份当日的数据备份到同一个目录中取,可以保留最近一个月的备份;
  3. 每次copy备份的时候,都把太久的备份给删了;
  4. 每天晚上将当前及其的备份复制一份到其他机器,以防止及其损坏。

你可能感兴趣的:(面试题,redis,数据库,缓存)