1.redis两种持久化的方式
RDB持久化机制:对redis中的数据执行周期性的持久化
AOF持久化机制:对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启时,可通过回放AOF日志中的写入指令来重新构建整个数据集
RDB的优点:
- RDB文件是紧凑的二进制文件,比较适合做冷备,全量复制的场景
- 相对于AOF持久化机制来说,直接基于RDB数据文件来重启和恢复Redis进程,更加快速;
- RDB对Redis对外提供的读写服务,影响非常小,可以让Redis保持高性能,因为Redis主进程只需要fork一个子进程,让子进程执行磁盘IO操作来进行RDB持久化即可;
RDB的缺点:
- 间隔一段时间才保存,一旦发送故障,会丢失数据
- RDB每次在fork子进程来执行RDB快照数据文件生成的时候,如果数据文件特别大,可能会导致对客户端提供的服务暂停数毫秒,或者甚至数秒;
- RDB无法实现实时或者秒级持久化
AOF的优点:
- AOF可以更好的保护数据不丢失。一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据,Redis进程挂了,最多丢掉1秒钟的数据;
- AOF日志文件以append-only模式写入,写入性能比较高
- AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
- 适合做灾难性的误删除紧急恢复
AOF的缺点:
- 对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大,恢复速度慢;
- AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的;
总结:
- 一般可以结合两种使用 rdb做冷备份,aof做热备份
- RDB是Redis内存到硬盘的快照,用于持久化。
- save通常会阻塞Redis。影响其他客户端连接时间。
- bgsave不会阻塞Redis ,但是会fork新进程。
- save自动配置满足任一就会被执行。