面试题答案
一键面试1. 子进程重写
- 策略:Redis 采用子进程进行 AOF 重写。子进程基于当前数据的快照生成新的 AOF 文件,主进程在子进程重写期间可以继续处理客户端请求,且父子进程之间通过写时复制(Copy - On - Write,COW)机制共享内存。
- 协同工作:主进程正常处理写操作,当子进程需要对共享内存中的数据进行修改时,系统会为子进程复制该部分内存,这样主进程的数据不受影响,减少了内存的额外占用,同时子进程可以独立完成 AOF 重写,不阻塞主进程,提升性能。
2. 增量 AOF 缓冲区
- 策略:在子进程进行 AOF 重写期间,主进程接收到的写命令会同时写入到增量 AOF 缓冲区。
- 协同工作:子进程重写完成后,主进程将增量 AOF 缓冲区中的命令追加到新生成的 AOF 文件末尾,保证数据的完整性。这样避免了在重写过程中主进程持续修改旧的 AOF 文件导致的额外内存开销,而且通过增量记录,减少了最终合并时的操作量,提升了重写的效率。
3. 重写逻辑优化
- 策略:
- 合并相同键的多次操作:例如对于同一个键的多次
SET
操作,重写时只保留最后一次SET
操作,减少冗余命令,从而减小 AOF 文件大小,间接减少内存占用。 - 优化数据结构的表示:使用更紧凑的命令表示数据,例如对于哈希结构,尽可能采用
HMSET
命令来替代多次HSET
命令,减少命令数量,降低内存使用。
- 合并相同键的多次操作:例如对于同一个键的多次
- 协同工作:通过优化重写逻辑,减少了 AOF 文件中命令的数量和大小,使得新生成的 AOF 文件更加紧凑,在写入磁盘和加载到内存时都能减少内存的使用,同时提高了重写速度,与子进程重写和增量 AOF 缓冲区机制共同保障内存的合理使用。