Redis持久化

文章目录

  • 1.什么是redis持久化?
  • 2.redis持久化机制
    • 2.1 RDB
      • 2.1.1 RDB触发机制
        • 2.1.1.1 自动触发
        • 2.1.1.2 手动触发
        • 2.1.1.3 优势
        • 2.1.1.4 缺点
      • 2.1.2 如何检查修复dump.rdb文件
      • 2.1.3 哪些情况会触发RDB快照
      • 2.1.4 如何禁用快照
      • 2.1.5 RDB优化配置项
    • 2.2 AOF
      • 2.2.1 AOF是什么?
      • 2.2.2 AOF持久化工作流程
      • 2.2.3 AOF缓冲区三种写回策略
      • 2.2.4 AOF配置/启动/修复/恢复
        • 2.2.4.1 配置
        • 2.2.4.2 启动
        • 2.4.4.3 恢复
      • 2.2.5 AOF优点和缺点
      • 2.2.6 AOF重写机制
    • 2.3 RDB-AOF混合持久化

1.什么是redis持久化?

redis是基于内存的数据库。优点是cpu读取内存速度快,一秒钟可以进行数十万次,可以直接和cpu速度相近,读取极快。缺点是基于内存,存在断电数据丢失的情况。为了防止其数据断电丢失,就需要将数据存入硬盘中,这样当redis服务重启时,就会将硬盘中的数据恢复到内存中。Redis持久化的意义就是为了保证突然宕机,内存数据不会全部丢失。redis有两种持久化机制:RDB和AOF

2.redis持久化机制

2.1 RDB

(1)RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写
(2)Redis中的数据都在内存中,保存备份时它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中
(3)配置文件
①Redis6.0.16以下
Redis持久化_第1张图片
Redis持久化_第2张图片

②Redis6.2以及Redis7

Redis持久化_第3张图片

2.1.1 RDB触发机制

2.1.1.1 自动触发

(1)redis7版本,redis.conf里配置触发时间
Redis持久化_第4张图片
(2)修改案例
Redis持久化_第5张图片
(3)修改dump文件保存路径(默认配置是dir ./ 表示在哪启动server时候的时候,dump.rdb就在哪生成)
Redis持久化_第6张图片
(4)修改dump文件名称
Redis持久化_第7张图片
(5)如何恢复
①将备份文件(dump.rdb)移动到redis安装目录并重新启动服务即可
②执行flushall或者flushdb命令可以清空redis,也会产生dump.rdb文件,但里面是空的
③注意:不可以把备份文件dump.rdb和生产redis服务器放在同一台机器,必须分开各自存储,以防生产机物理损坏后备份文件也挂了。

2.1.1.2 手动触发

(1)Redis提供了两个命令来生成RDB文件,分别是save和bgsave
(2)Save在主程序中执行会阻塞当前Redis服务器,直到持久化工作完成。在执行save命令期间,Redis不能处理其他命令,线上禁止使用
(3)BGSAVE是默认的方法,Redis会在后台异步进行快照操作,不阻塞快照的同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程
(4)Redis会使用bgsave对当前内存中的所有数据做快照,这个操作是子进程在后台完成的,这就运行主进程同时可以修改数据
(5)fork是什么?
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,尽量避免膨胀。
(6)可以通过lastsave命令获取最后一次成功执行快照的时间
Redis持久化_第8张图片

2.1.1.3 优势

(1)适合大规模的数据恢复
(2)安装业务定时备份
(3)对数据完整性和一致性要求不高
(4)RDB文件在内存中的加载速度要比AOF快得多

2.1.1.4 缺点

Redis持久化_第9张图片

2.1.2 如何检查修复dump.rdb文件

在这里插入图片描述

2.1.3 哪些情况会触发RDB快照

(1)配置文件中默认的快照配置
(2)手动save/bgsave命令
(3)执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义
(4)执行shutdown且没有设置开启AOF持久化
(5)主从复制时,主节点自动触发

2.1.4 如何禁用快照

(1)命令行模式:redis-cli config set save ""
(2)修改配置文件,将下面注释save ""打开
Redis持久化_第10张图片

2.1.5 RDB优化配置项

(1)stop-writes-on-bgsave-error

Redis持久化_第11张图片
(2)rdbcompression
Redis持久化_第12张图片
(3)rdbchecksum
Redis持久化_第13张图片
(4)rdb-del-sync-files
Redis持久化_第14张图片

2.2 AOF

2.2.1 AOF是什么?

(1)以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
(2)默认情况下,redis是没有开启AOF(append only file)的。开启AOF功能需要设置配置:appendonly yes

Redis持久化_第15张图片

(3)AOF保存的是appendonly.aof文件

2.2.2 AOF持久化工作流程

Redis持久化_第16张图片

2.2.3 AOF缓冲区三种写回策略

在这里插入图片描述

Redis持久化_第17张图片

2.2.4 AOF配置/启动/修复/恢复

2.2.4.1 配置

(1)配置文件默认写回策略为:每秒钟
Redis持久化_第18张图片
(2)aof文件-保存路径
①redis6:AOF保存文件的位置和RDB保存文件的位置一样,都是通过redis.conf配置文件的dir配置
Redis持久化_第19张图片
②redis7:dir + appenddirname
Redis持久化_第20张图片
(3)aof文件-保存名称
①redis6:有且只有一个
Redis持久化_第21张图片
②redis7,使用Multi Part AOF的设计
在appendonly.aof文件下采用Multi Part AOF的设计,分为基本(BASE)文件、增量(INCR)文件和清单(manifest)文件
Redis持久化_第22张图片

2.2.4.2 启动

Redis持久化_第23张图片

2.4.4.3 恢复

(1)正常恢复:重启redis然后重新加载,结果OK
(2)异常恢复:使用redis-check-aof --fix 进行恢复

2.2.5 AOF优点和缺点

(1)优点
Redis持久化_第24张图片
(2)缺点
Redis持久化_第25张图片

2.2.6 AOF重写机制

(1)AOF重写机制是什么?
Redis持久化_第26张图片
(2)AOF触发机制
①官网默认配置
Redis持久化_第27张图片
②自动触发:满足配置文件中的选项后,Redis会记录上次重写时的AOF大小。默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时
②手动触发:客户端向服务器发送bgrewriteaof命令
(3)重写原理
Redis持久化_第28张图片

2.3 RDB-AOF混合持久化

(1)官网建议
Redis持久化_第29张图片

(2)RDB-AOF混合持久化数据恢复顺序和加载流程
Redis持久化_第30张图片
(3)开启RDB-AOF混合持久化

Redis持久化_第31张图片
(4)开启RDB、AOF会影响Redis效率,可以使用纯缓存模式(同时关闭RDB+AOF)
Redis持久化_第32张图片

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