Redis-持久化(RDB和AOF)

文章目录

  • RDB
    • 配置
    • 测试
  • AOF
    • 配置
    • 修复
  • 如何选择

Redis是内存数据库,所以一旦断电或服务器进程退出,都会丢失数据,所以Redis提供了持久化功能。

RDB


RDB(Redis DataBase)Redis默认数据库,快照。
在指定间隔时间内将内存中的数据集快照写入磁盘,即Snapshot快照,恢复数据时直接将快照文件读到内存。
工作原理
当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:

  • Redis 调用forks. 同时拥有父进程和子进程。
  • 子进程将数据集写入到一个临时 RDB 文件中。
  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

触发RDB保存

  • 满足save规则(可配置)
  • 执行flushall命令后会触发
  • 退出redis也会产生rdb文件

优缺点

优点 缺点
适合大规模数据恢复 fork进程时会占内存
适合数据完整性要求不高 需要一定时间间隔触发,可能丢失最后一次修改数据

配置


默认即可

Redis-持久化(RDB和AOF)_第1张图片

Redis-持久化(RDB和AOF)_第2张图片
Redis-持久化(RDB和AOF)_第3张图片

测试


Redis-持久化(RDB和AOF)_第4张图片

AOF


AOF(Append Only File)只追加操作的文件。
以日志形式记录每个写操作指令,只追加文件不改写文件,Redis启动时读取该文件来重构数据,即依次执行写指令。
工作原理
AOF 重写和 RDB 创建快照一样,都巧妙地利用了写时复制机制:

  • Redis 执行 fork() ,现在同时拥有父进程和子进程。
  • 子进程开始将新 AOF 文件的内容写入到临时文件。
  • 对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾,这样样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。
  • 当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。
  • 搞定!现在 Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。

优缺点

优点 缺点
更好保证数据完整性 恢复数据速度慢
aof文件可以读懂 运行效率也比rgb慢

配置


Redis-持久化(RDB和AOF)_第5张图片
Redis-持久化(RDB和AOF)_第6张图片
Redis-持久化(RDB和AOF)_第7张图片

修复


持久化测试和RGB大同小异,删除aof文件后数据丢失。说一下AOF文件修复:
修改配置开启AOF,进行若干写操作:
Redis-持久化(RDB和AOF)_第8张图片
Redis-持久化(RDB和AOF)_第9张图片

然后再次连接redis客户端,报错拒绝连接:
在这里插入图片描述

启动修复
Redis-持久化(RDB和AOF)_第10张图片
Redis-持久化(RDB和AOF)_第11张图片
眼尖的人儿发现了rdb也有redis-check-rdb,然而rdb文件我们是看不懂的,你可以自己试试(偷懒 )
Redis-持久化(RDB和AOF)_第12张图片

如何选择


其实就用官方默认RDB就好了。
引用官网:
Redis-持久化(RDB和AOF)_第13张图片

请勿转载本不富裕的访问量雪上加霜
博主首页:https://blog.csdn.net/qq_45034708
你的点赞将会是我最大的动力,关注一波

你可能感兴趣的:(Redis)