AOF

Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它。
特点:

  • 先执行写操作命令,再将命令记录到AOF日志中。

写回策略

写回策略 写回时机 优点 缺点
Always 同步写回 可靠性高、最大程度保证数据不丢失 每个写命令都要写回硬盘,性能开销大
Everysec 每秒写回 性能适中 宕机时丢失1秒内的数据
No 由操作系统控制写回 性能好 宕机时丢失的数据可能会很多

AOF过大时的策略

当 AOF 文件的大小超过所设定的阈值后,Redis 就会启用 AOF 重写机制,来压缩 AOF 文件。

  • 只记录最新的键值对

RDB

快照机制,把内存中所有数据记录到磁盘中,

执行bgsave时通过fork()创建子进程进行,同时子进程复制父进程的页表,所以读是不会阻塞子进程的。
针对写操作,被修改的数据会复制一份副本,然后bgsave子进程会把该副本数据写入RDB文件,在这个过程中,主线程仍然可以直接修改原来的数据。

两者对比

  • AOF记录指令,RDB记录数据
  • AOF优点是丢失数据少,但是数据恢复不快
  • RDB优点是数据恢复速度快,但是快照频率不好把握。

混合持久化

AOF 文件的前半部分是 RDB 格式的全量数据,后半部分是 AOF 格式的增量数据。

参考

https://xiaolincoding.com/redis/storage/aof.html#aof-%E6%97%A5%E5%BF%97