面试题答案
一键面试自定义持久化策略
- 实现思路
- 采用混合持久化方式,结合 RDB(Redis Database)和 AOF(Append - Only File)的优点。RDB 适合大规模数据的恢复,因为它是对数据的快照,恢复速度相对较快;AOF 则可以保证数据的完整性,记录每一个写操作。
- 在高并发写入时,通过调整 AOF 的刷盘策略,在保证数据丢失较少的情况下尽量减少磁盘 I/O 对性能的影响。同时,定期执行 RDB 快照,以便在需要时能够快速恢复大部分数据。
- 关键步骤
- AOF 配置调整:
- 设置
appendfsync
为everysec
,这是一种折中的刷盘策略。每秒将缓冲区的写命令刷入磁盘,这样即使系统崩溃,最多只会丢失 1 秒的数据。 - 配置
no - appendfsync - on - rewrite
为yes
,在执行 AOF 重写时,不进行额外的刷盘操作,避免过多的磁盘 I/O 影响性能。
- 设置
- RDB 配置调整:
- 合理设置
save
条件,例如save 900 1
表示 900 秒内如果有 1 个 key 发生变化则执行 RDB 快照;save 300 10
表示 300 秒内如果有 10 个 key 发生变化则执行 RDB 快照等。可以根据业务场景和数据变化频率进行调整。 - 启用
rdbcompression
来压缩 RDB 文件,减少磁盘空间占用,但这会消耗一定的 CPU 资源。
- 合理设置
- AOF 配置调整:
自定义数据恢复策略
- 实现思路
- 优先尝试使用 AOF 文件进行数据恢复,因为 AOF 记录了最新的写操作,能保证数据的一致性。如果 AOF 文件损坏或不存在,则使用 RDB 文件进行恢复。
- 在恢复 AOF 文件时,对可能存在的错误进行检测和修复,确保数据的正确性。
- 关键步骤
- AOF 恢复:
- 启动 Redis 时,检查 AOF 文件是否存在且完整。可以通过
redis - check - aof
工具对 AOF 文件进行语法检查。 - 如果 AOF 文件正常,Redis 会按照 AOF 文件中的记录顺序重新执行写命令,恢复数据。
- 启动 Redis 时,检查 AOF 文件是否存在且完整。可以通过
- RDB 恢复:
- 当 AOF 文件不可用时,Redis 会加载 RDB 文件。RDB 文件是一个二进制快照,Redis 直接将其加载到内存中,快速恢复数据。
- 加载 RDB 文件后,如果存在后续的 AOF 增量文件(例如在 RDB 快照后又有一些写操作记录在 AOF 中),则继续重放 AOF 增量文件,以保证数据的最新性。
- AOF 恢复: