面试题答案
一键面试AOF持久化记录事务操作方式
- 命令追加:Redis的AOF(Append - Only - File)持久化是将执行的写命令以日志的形式追加到AOF文件中。当开启事务时,Redis并不会立即将事务中的命令写入AOF文件。只有当事务执行
EXEC
命令时,才会将整个事务的所有命令作为一个整体追加到AOF文件中。这是因为在事务执行EXEC
之前,事务中的命令可能会被DISCARD
取消,所以在EXEC
之前无需记录。 - 格式记录:AOF文件记录的是Redis的原生命令格式。例如,如果事务中有一个
SET key value
命令,那么在AOF文件中就会以类似*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n
这样的格式记录(这是Redis协议格式)。当事务中有多个命令时,AOF文件会按顺序依次记录这些命令。
事务执行中系统崩溃,AOF保证数据一致性的方式
- 重放机制:当Redis重启时,它会读取AOF文件并重新执行其中记录的命令,以此来恢复到崩溃前的状态。如果在事务执行过程中发生系统崩溃,由于只有在
EXEC
执行后事务命令才会被写入AOF文件,所以已写入AOF文件的事务必然是完整的。Redis在重启重放AOF文件时,会按顺序执行其中的命令,对于完整的事务,会成功重放,从而保证数据的一致性。 - 部分写入处理:如果在
EXEC
命令写入AOF文件的过程中发生崩溃,可能会导致AOF文件中的事务记录不完整。Redis提供了redis - check - aof
工具来修复这种情况。该工具会扫描AOF文件,检测并移除不完整的事务记录。然后Redis在重启时,重放修复后的AOF文件,确保只执行完整的事务,进而保证数据一致性。