Redis 持久化和aof相关问题

发布时间 2023-09-12 17:18:11作者: xiuer211

Redis 持久化和aof

Redis 如何实现数据不丢失?

有三种方式实行持久化

  • aof,将执行成功的写命令保存到aof文件中,如果aof文件过大会发生aof重写
  • rdb,保存内存数据的快照
  • 混合模式,同时使用aof和rdb,提高性能

为什么aof要先执行命令再保存命令

不用检查命令合法,不会阻塞当前写的命令

缺点:数据丢失,阻塞后续命令的执行

aof回写的方式有几种

三种策略

  • always,每次执行完写命令之后就会将aof缓冲池的内容写入文件
    • 优点:可靠性高
    • 缺点:性能开销大
  • everysec,每隔一秒将aof缓存池的内容写入文件
    • 优点:性能适中
    • 缺点:丢失1秒的数据
  • no,将写入文件的时机交给操作系统
    • 优点:性能好
    • 缺点:可能丢失很多数据

AOF 日志过大,会触发什么机制?

会触发aof重写机制,aof重写创建一个子进程用来扫描数据库的内容,将内容保存到新的aof文件中,如果数据库新增数据,就会先这个数据保存到aof重写缓冲池中,子进程扫描结束之后就会发送信号给主进程,主进程会将aof重写缓冲池的内容追加到新的aof文件,将新文件改名覆盖旧文件。

为什么aof重写要开启子进程,为什么不是开启子线程

  • 开启子进程不阻塞主进程的运行
  • 子进程有父进程的内存副本,如果开启子线程,会涉及到加锁,解锁问题,会降低性能。如果父进程的内存发生变化,会拷贝一份到子进程,子进程也就没有加锁解锁问题了