Redis的AOF日志
AOF日志
Redis 的持久化主要有两大机制,即 AOF(Append Only File)日志和 RDB 快照。AOF是写后日志,先执行命令再记录日志。这样就不会存在命令错误和阻塞当前写操作了。
风险:
- 如果刚执行完一个命令,还没有来得及记日志就宕机了,那么这个命令和相应的数据就有丢失的风险。
- AOF 虽然避免了对当前命令的阻塞,但可能会给下一个操作带来阻塞风险。
写回磁盘策略:
Always:同步写回:每个写命令执行完,立马同步地将日志写回磁盘;
Everysec:每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;
No:操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
AOF重写机制:
AOF会随着命令越来越多而变大,这个时候就需要对AOF进行重写。重写机制具有“多变一”功能。旧日志文件中的多条命令,在重写后的新日志中变成了一条命令。
和 AOF 日志由主线程写回不同,重写过程是由后台子进程 bgrewriteaof 来完成的,这也是为了避免阻塞主线程,导致数据库性能下降。
重写过程:
每次 AOF 重写时,Redis 会先执行一个内存拷贝,用于重写;然后,使用两个日志保证在重写过程中,新写入的数据不会丢失(AOF重写缓冲会在重写完成后写入新的AOF文件中)。而且,因为 Redis 采用额外的线程进行数据重写,所以,这个过程并不会阻塞主线程。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 goMars的学习随记!
评论