1.AOF日志

1.1 写后日志

AOF日志为写后日志,Redis先执行命令,把数据写入内存,然后才记录日志。如下图所示:
AOF日志和RDB快照

1.2 AOF日志记录的内容

AOF日志里记录的是Redis收到的每一条命令,这些命令以文本形式保存。以记录"set testkey testvalue"命令为例,看AOF日志的内容。其中,"*3"表示当前命令有三个部分,每个部分都是由"$+数字"开头,后面紧跟着具体的命令、键或者值。“数字”表示这部分中的命令、键或者值一共有多少字节。例如,"$3 set"表示这部分有3字节,也就是"set"命令。
AOF日志和RDB快照

1.3 为啥采用写后日志

优点:为了避免额外的检查开销,Redis在向AOF里面记录日志的时候,并不会先对这些语法进行检查。如果先记日志再执行命令,日志中就可能记录了错误的命令,Redis在使用日志恢复数据时,就可能出错。所以Redis就采用写后日志这种方式,让系统先执行命令,只有命令才能执行成功,才会被记录到日志中。否则,系统会直接向客户端报错。写后日志能避免记录错误命令的情况。
写后日志还有一个好处:在命令执行后才开始记录,不会阻塞当前的写操作。
缺点
1.执行完一个命令,还没来得及记日志就宕机了,那么这个命令和相应的数据就有丢失的风险。如果此时Redis是用作缓存,还可以从后端数据库重新读入数据进行恢复,但是,如果Redis用作数据库,此时命令没有记录到日志中,就无法用日志进行恢复了。
2.虽然避免了当前命令的阻塞,但可能会给下一个操作带来阻塞风险,

相关文章: