题目
- 说下Redis的持久化⽅式RDB和AOF区别
回答
-
Redis持久化介绍
-
- Redis是⼀个内存数据库,如果没有配置持久化,redis重启后 数据就全丢失
-
- 因此开启redis的持久化功能,将数据保存到磁盘上,当redis 重启后,可以从磁盘中恢复数据。
-
两种持久化⽅式
-
- RDB (Redis DataBase)
-
- AOF (append only file)
-
RDB持久化介绍
-
- 在指定的时间间隔内将内存中的数据集快照写⼊磁盘
-
- 默认的⽂件名为dump.rdb
-
- 产⽣快照的情况
-
-
- save
-
-
-
-
- 会阻塞当前Redis服务器,执⾏save命令期间,Redis不 能处理其他命令,直到RDB过程完成为⽌
-
-
-
-
- bgsave
-
-
-
-
- fork创建⼦进程,RDB持久化过程由⼦进程负责,会在 后台异步进⾏快照操作,快照同时还可以响应客户端请求
-
-
-
-
- ⾃动化
-
-
-
-
- 配置⽂件来完成,配置触发 Redis的 RDB 持久化条件 ⽐如 "save m n"。表示m秒内数据集存在n次修改时, ⾃动触发bgsave
-
-
-
-
- 主从架构
-
-
-
-
- 从服务器同步数据的时候,会发送sync执⾏同步操作, master主服务器就会执⾏bgsave
-
-
-
- 优点
-
-
- RDB⽂件紧凑,全量备份,适合⽤于进⾏备份和灾难恢复
-
-
-
- 在恢复⼤数据集时的速度⽐ AOF 的恢复速度要快
-
-
-
- ⽣成的是⼀个紧凑压缩的⼆进制⽂件
-
-
- 缺点
-
-
- 每次快照是⼀次全量备份,fork⼦进程进⾏后台操作,⼦ 进程存在开销
-
-
-
- 在快照持久化期间修改的数据不会被保存,可能丢失数据
-
-
AOF持久化介绍
-
- append only file,追加⽂件的⽅式,⽂件容易被⼈读懂
-
- 以独⽴⽇志的⽅式记录每次写命令, 重启时再重新执⾏AOF ⽂件中的命令达到恢复数据的⽬的
-
- 写⼊过程宕机,也不影响之前的数据,可以通过 redis-check aof检查修复问题
-
- 配置
-
-
- appendonly yes,默认不开启
-
-
-
- AOF⽂件名 通过 appendfilename 配置设置,默认⽂件名 是appendonly.aof
-
-
-
- 存储路径同 RDB持久化⽅式⼀致,使⽤dir配置
-
-
- 核⼼原理
-
-
- Redis每次写⼊命令会追加到aof_buf(缓冲区)
-
-
-
- AOF缓冲区根据对应的策略向硬盘做同步操作
-
-
-
- ⾼频AOF会带来影响,特别是每次刷盘
-
-
- 提供了3种同步⽅式,在性能和安全性⽅⾯做出平衡
-
-
- appendfsync always
-
-
-
-
- 每次有数据修改发⽣时都会写⼊AOF⽂件,消耗性能多
-
-
-
-
- 每秒钟同步⼀次,该策略为AOF的缺省策略。
-
-
-
- appendfsync no
-
-
-
- -不主从同步,由操作系统⾃动调度刷磁盘,性能是最好 的,但是最不安全
-