面试题答案
一键面试Redis跳跃表常见持久化方式
- RDB(Redis Database):将Redis在内存中的数据以快照的形式保存到磁盘,在指定的时间间隔内将内存的数据以二进制的形式写入到一个dump.rdb文件中。
- AOF(Append - Only - File):以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
以RDB为例说明实现过程关键步骤与技术要点
- 关键步骤:
- 触发机制:分为手动触发(SAVE、BGSAVE命令)和自动触发(根据配置文件中save m n规则,在m秒内如果有n个键发生变化则自动触发BGSAVE)。
- 子进程创建:BGSAVE时,Redis主进程fork一个子进程来进行持久化操作,主进程继续处理客户端请求。
- 数据写入:子进程将内存数据以RDB格式写入到临时文件。
- 替换旧文件:子进程完成写入后,将临时文件替换为最终的dump.rdb文件。
- 技术要点:
- fork操作:fork时采用写时复制(Copy - On - Write, COW)技术,父进程和子进程共享内存数据,只有当父进程修改数据时才复制一份数据,保证子进程的数据一致性。
- RDB文件格式:需要了解RDB文件的二进制结构,包括文件头、数据库数据、EOF标记等,以正确写入和读取数据。
- 错误处理:在写入文件过程中要处理各种可能的错误,如磁盘空间不足、I/O错误等,确保持久化过程的可靠性。