Redis 的持久化方式有两种:RDB、AOF
RDB
RDB 是某个时间点数据的快照,可以定期全量备份。
原理:
- 父进程 fork 子进程
- 子进程将数据写入临时 RDB 文件中
- 子进程完成写入时,用临时 RDB 替换掉旧的 RDB
- 假如1点开始备份数据,1点以后的数据不会被备份,因为子进程看不到父进程的数据
优点:恢复速度快。
缺点:窗口期数据易丢失。
AOF
AOF 记录每次写操作的日志。
如果每次写操作都记录日志,最终的 AOF 文件就会无限大,如何解决这个问题呢?
- 重写。Redis 择时将内存中的数据备份到临时 AOF 文件中,备份时点之后的数据先写到缓存中,临时 AOF 文件完成写入之后,再将缓存中的数据写入临时 AOF 文件,最后用临时 AOF 文件替换掉旧的 AOF 文件。
- 从 4.x 版本开始 AOF 文件支持 RDB+AOF 的混合体,重写是写 RDB,然后在 AOF 文件开头记录 RDB 文件的信息。
优点:丢失数据少