Redis—AOF持久化

一、AOF定义

保存写操作命令到日志的持久化方式,就是 Redis 里的 AOF(Append Only File) 持久化功能

定义:以日志的形式记录每个操作,记录写指令不记录读指令,只许追加⽂件不允许修改,AOF保存的是appendonly.aof⽂件,恢复的时候从前到后执行⼀次。

二、AOF过程

Redis 是先执行写操作命令后,才将该命令记录到 AOF 日志里的

这样的好处有两点

1.避免额外的检查开销。

2.不会阻塞当前写操作命令的执行

AOF有两个风险

1.执行写操作命令和记录日志是两个过程,那当 Redis 在还没来得及将命令写入到硬盘时,服务器发生宕机了,这个数据就会有丢失的风险。

2.第二个风险,前面说道,由于写操作命令执行成功后才记录到 AOF 日志,所以不会阻塞当前写操作命令的执行,但是可能会给「下一个」命令带来阻塞风险

三、Redis三种写入硬盘的策略

Redis写入硬盘的过程

1. Redis 执行完写操作命令后,会将命令追加到 server.aof_buf 缓冲区;
2. 然后通过 write() 系统调用,将 aof_buf 缓冲区的数据写入到 AOF 文件,此时数据并没有写入到硬盘,而是拷贝到了内核缓冲区 page cache,等待内核将数据写入硬盘;
3. 具体内核缓冲区的数据什么时候写入到硬盘,由内核决定。

三种写入硬盘的策略

1. Always,每次写操作命令执行完后,同步将 AOF 日志数据写回硬盘;
2. Everysec,每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,然后每隔一秒将缓冲区里的内容写回到硬盘;
3. No,意味着不由 Redis 控制写回硬盘的时机,转交给操作系统控制写回的时机,也就是每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,再由操作系统决定何时将缓冲区内容写回硬盘。

四、AOF重写机制

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

AOF 重写机制是在重写时,读取当前数据库中的所有键值对,然后将每一个键值对用一条命令记录到「新的 AOF 文件」,等到全部记录完后,就将新的 AOF 文件替换掉现有的 AOF 文件。

五、AOF优缺点

▪ 优点:

• 如果后台线程每秒执行fsync,数据最多丢失⼀秒

• 直接追加在⽂件末尾,写入性能⾼

▪ 缺点:

• aof文件大,恢复速度慢;

• 数据恢复慢,不适合做冷备

你可能感兴趣的:(Redis,redis,数据库,缓存)