Redis持久化: RDB&AOF

2022-12-10 16:14:04 浏览数 (1)

持久化流程:

  1. 客户端向数据库发送写命令:数据在客户端的内存;
  2. 数据库接收到客户端的请求:数据在服务器的内存;
  3. 数据库调用系统API将数据写入磁盘:数据在内核缓冲区;
  4. 操作系统将写缓冲区传输到磁盘控制器:数据在磁盘缓存中;
  5. 操作系统的磁盘控制器将数据写入实际的物理媒介:数据在磁盘中;

持久化方式

RDB: 指定的时间间隔能对你的数据进行快照存储.

AOF: 记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.

RDB

  • 配置方式:

(1)手动触发快照:

save (阻塞客户端发送的请求)

bgsave (异步创建快照)

(2)自动触发:

save 900 2 (服务器在900秒之内,对数据库至少进行了2次修改的话,就会执行 bgsave命令)

save 300 20 (服务器在300秒之内,对数据库至少进行了20次修改的话,就会执行 bgsave命令)

  • 原理:fork()是unix系统的一个api;

fork一个子进程, 子进程先共享父进程的数据;

当主进程数据有写入操作时, 触发copy on write , 此时给子进程分配物理空间,并将资源复制给子进程;

AOF

AOF(append only file): 记录redis操作的指令。会过滤掉无效指令;

AOF重写: 开辟一个子进程,对内存进行遍历,序列化到一个新的AOF日志文件

  • 配置:
代码语言:javascript复制
appendonly yes
#将 aof_buf缓冲区的所有内容写入并同步到AOF文件
appendfsync always 
#将 aof_buf缓冲区的所有内容写入并同步到AOF文件,每秒执行一次
appendfsync everysec 
#将 aof_buf缓冲区的所有内容写入到AOF文件,但何时同步由操作系统决定
appendfsync no

RDB与AOF对比:

RDB 优点:

  1. 是一个非常紧凑的二进制文件,恢复更快

RDB缺点:

  1. 会丢失指定时间间隔的数据

AOF优点:

  1. 实时持久化,数据安全性高

AOF缺点 :

  1. 由于是日志追加,体积要比RDB大。
  2. 数据量大时,恢复慢;

混合持久化

RDB会丢失部分数据,AOF日志重放要慢很多;

Redis4.0 为了解决这个问题, 采用了混合持久化的方式;

优点:混合持久化结合了 RDB 和 AOF 持久化的优点,开头为 RDB 的格式,使得 Redis 可以更快的启动,同时结合 AOF 的优点,又降低了大量数据丢失的风险。

0 人点赞