2023.5.31编辑, 该篇文章主要用于记录自己碎片化学习的资料
RDB
在进行 RDB 的时候,redis 的主线程是不会做 io 操作的,主线程会 fork 一个子线程来完成该操作;
1. Redis 调用forks。同时拥有父进程和子进程。
2. 子进程将数据集写入到一个临时 RDB 文件中。
3. 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。
这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益(因为是使用子进程进行写操作,而父进程依然可以接收来自客户端的请求。)
AOF
将所有的命令都记录下来,恢复的时候就把这个文件全部都执行一遍
以日志的形式来记录每个写的操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
Aof默认保存的是appendonly.aof文件,且默认不开启,可以在redis.conf中修改
若AOF文件有错位, 这时候 redis 文件无法启动。这时,则需要进行文件的修复。可以使用Redis提供的redis-check-aof工具
进行修复, 对应的指令为redis-check-aof --fix filename