后端岗位面试题更新 2026-08-05

当 Redis 实例出现内存溢出时,你会采取怎样的应对措施?请详细说明你的排查步骤和解决策略。

后端开发性能优化风险判断问题排查Redis

考察说明

考查候选人面对 Redis 内存溢出时的排查能力和系统化解决方案设计能力。

回答思路

  1. 【回答框架 1】先确认内存溢出的具体表现,如报错信息、可用内存趋势和 Redis 的 maxmemory 配置,同时观察是否触发了内存淘汰策略,如 noeviction、allkeys-lru 等,并检查 key 的 TTL 设置。
  2. 【回答框架 2】使用 redis-cli 的 info memory 查看 used_memory、used_memory_human、mem_fragmentation_ratio 等指标,结合监控工具分析内存增长曲线,定位是数据量增长还是内存碎片问题。
  3. 【回答框架 3】排查大 key 和热点 key,通过 redis-cli --bigkeys 或自定义扫描找出占用大量内存的键,评估是否可以通过拆分、压缩或删除来释放空间,同时检查是否存在未设置过期时间的 key 导致内存持续增长。
  4. 【回答框架 4】根据业务场景调整 maxmemory 策略和淘汰算法,例如使用 volatile-lru 或 allkeys-lru,并优化数据存储结构,如使用 hash 代替 string 的批量字段,或对缓存数据做序列化压缩。
  5. 【回答框架 5】若内存碎片严重,考虑重启实例或使用 memory purge 命令整理碎片;若数据量持续增长,需要规划集群扩容或迁移至内存更大的实例,并评估持久化配置是否导致内存峰值。
  6. 【关键点 1】排查步骤遵循:确认表现、查看监控、定位大 key、检查配置、调整策略。
  7. 【关键点 2】内存溢出多与 maxmemory 设置过小、数据无过期、大 key 或内存碎片有关。
  8. 【关键点 3】解决方案包括调整内存淘汰策略、优化数据结构、拆分大 key、以及扩容或迁移。
  9. 【关键点 4】需结合业务场景平衡内存使用和命中率,不能盲目删除数据。
  10. 【易错点 1】只关注调整 maxmemory 而不排查具体数据增长根源,导致问题反复出现。
  11. 【易错点 2】忽略内存碎片和持久化对内存的影响,可能错误认为是数据量过大。
  12. 【易错点 3】在未评估业务影响的情况下直接执行 flushall 或删除数据,造成可用性风险。