面试题答案
一键面试1. 持久化策略设计
AOF 为主,RDB 为辅
- AOF(Append - Only - File):开启 AOF 持久化,AOF 以日志形式记录写操作,能保证数据的高可用性。通过设置
appendfsync
参数为everysec
,每秒将缓冲区数据同步到磁盘,这样既减少了持久化对主进程性能的影响,又能在系统故障时只丢失 1 秒的数据,满足数据恢复时间要求。 - RDB(Redis Database):同时保留 RDB 持久化,设置合理的
save
配置,例如save 900 1
(900 秒内如果至少有 1 个 key 发生变化,则进行 RDB 快照),save 300 10
(300 秒内如果至少有 10 个 key 发生变化,则进行 RDB 快照)。RDB 适合用于全量数据恢复,能加快大规模数据恢复速度。
2. 配置参数调整
- AOF 相关:
appendonly yes
:开启 AOF 持久化。appendfsync everysec
:设置 AOF 日志同步策略为每秒同步一次。no - appendfsync - on - rewrite no
:在 AOF 重写期间,不停止对 AOF 日志的同步,保证数据安全性。
- RDB 相关:
- 根据业务需求设置
save
参数,如前文提到的save 900 1
和save 300 10
等。 rdbcompression yes
:开启 RDB 文件压缩,减少磁盘占用,但会消耗一定 CPU 资源。dbfilename dump.rdb
:指定 RDB 文件名称。
- 根据业务需求设置
3. 工具或技术
- Redis Sentinel:用于监控 Redis 主节点的状态,当主节点出现故障时,自动将从节点提升为主节点,保证系统的高可用性。配置 Sentinel 时,需要指定监控的主节点信息,如
sentinel monitor mymaster 127.0.0.1 6379 2
,其中mymaster
是主节点名称,127.0.0.1
是主节点 IP,6379
是端口,2
表示需要至少 2 个 Sentinel 节点同意才能进行故障转移。 - Redis Cluster:如果数据量较大,可以考虑使用 Redis Cluster 进行数据分片,提高系统的扩展性和可用性。每个节点负责一部分数据,同时可以配置从节点来保证高可用性。
4. 运行过程中的监控和优化
- 监控工具:
- Redis INFO 命令:通过
INFO
命令获取 Redis 服务器的各种信息,包括持久化相关指标,如aof_last_rewrite_time_sec
可查看上次 AOF 重写耗时,rdb_last_bgsave_time_sec
可查看上次 RDB 后台保存耗时等。 - Prometheus + Grafana:结合 Prometheus 采集 Redis 指标数据,如 AOF 日志增长速度、RDB 文件大小变化等,然后通过 Grafana 进行可视化展示,方便实时监控。
- Redis INFO 命令:通过
- 优化措施:
- AOF 重写优化:定期检查 AOF 文件大小,当 AOF 文件增长过快时,手动触发
BGREWRITEAOF
命令进行重写,优化 AOF 文件结构,减少文件体积。同时注意在系统负载较低时进行重写,避免影响正常业务。 - RDB 优化:合理调整
save
参数,避免过于频繁的 RDB 快照操作导致 CPU 负载过高。如果 CPU 资源紧张,可以考虑关闭 RDB 压缩,即设置rdbcompression no
。 - 内存优化:监控 Redis 内存使用情况,合理设置
maxmemory
参数,避免因内存不足导致数据丢失或性能下降。采用合适的内存淘汰策略,如volatile - lru
(从已设置过期时间的 key 中,移除最近最少使用的 key)。
- AOF 重写优化:定期检查 AOF 文件大小,当 AOF 文件增长过快时,手动触发