一、前言
本文主要讲了 Redis 的持久化相关功能,持久化一直是影响 Redis 性能的高发地,也是面试中经常被问到的。
包括 RDB 相关的特定和优缺点,AOF 的优缺点,事实上,由于 RDB 的数据实时性问题,目前用 AOF 比较多了,而持久化恢复也是优先 AOF。
RDB 是旧的模式,现在基本上都使用 AOF,当然,今天两个都会一起聊聊。
二、RDB
RDB 流程图:
RDB 特点:
- RDB 是一种快照模式,即——保存的是 key value 数据内容。
- RDB 有 2 种持久方式,同步 save 模式和异步 bgsave 模式。由于 save 是同步的,所以可以保证数据一致性,而 bgsave 则不能。
- save 可以在客户端显式触发,也可以在 shutdown 时自动触发;bgsave 可以在客户端显式触发,也可以通过配置由定时任务触发,也可以在 slave 节点触发。
- save 导致 redis 同步阻塞,基本已经废弃。bgsave 则不会导致阻塞,但也有缺点:在 fork 时,需要增加内存服务器开销,因为当内存不够时,将使用虚拟内存,导致阻塞 Redis 运行。所以,需要保证空闲内存足够。
- 默认执行 shutdown 时,如果没有开启 AOF,则自动执行 bgsave。
- 每次的 RDB 文件都是替换的。
关于优化:
Redis 会压缩 RDB 文件,使用 LZF 算法,让最终的 RDB 文件远小于内存大小,默认开启。但会消耗 CPU。
RDB 缺点:
- 无法秒级持久化。
- 老版本 Redis 无法兼容新版本 RDB。
RDB 优点:
- 文件紧凑&