跳到内容
当前位置:首页>面试真题>大厂Redis面试通关(1):内存飙升100%、单线程为什么快?这5道生产,答对3道算你赢!

大厂Redis面试通关(1):内存飙升100%、单线程为什么快?这5道生产,答对3道算你赢!

  • 2026-10-20 06:20:18
大厂Redis面试通关(1):内存飙升100%、单线程为什么快?这5道生产,答对3道算你赢!

面试官问:“Redis单线程为什么还这么快?”、“线上Redis内存突然飙升,你怎么排查?”

如果你只会背“纯内存、IO多路复用”,那面试官可能会觉得你是个“背题机器”。真正的运维高手,会把面试题答出生产环境的深度和排障的肌肉记忆。

这是【DevOps-运维小子】Redis面试通关合集的第1篇。今天我们把应用场景、单线程原理、数据类型、内存淘汰与持久化这五块硬骨头啃下来。

📖 【考点1:Redis有哪些应用场景?】

👉 基础回答:缓存、分布式锁、消息队列、排行榜、计数器。

👉 生产级回答(加分项):除了上面这些,还要提到热点数据缓存(防雪崩、防穿透、防击穿)、Session共享、限流、Geo地理位置计算。

💡 面试官想听的:你要能讲出你在生产环境怎么用的。比如:“我们把Redis用作缓存,同时利用ZSet做实时排行榜。为了防止缓存雪崩,我们在过期时间上加了随机值;为了防止穿透,我们引入了布隆过滤器。”

🛠️ 【考点2:Redis单进程为什么还这么快?】

👉 标准答案:

  1. 纯内存操作:数据都在内存里,读写速度极快。

  2. 单线程避免锁竞争:不用加锁,没有上下文切换开销。

  3. IO多路复用:基于epoll实现高并发连接。

  4. 高效的数据结构:比如跳表、压缩列表等。

👉 生产级回答(加分项):“但是,单线程指的是网络IO和键值对读写是单线程,持久化、异步删除、集群数据同步都是多线程的。而且,如果生产环境执行了 keys * 或者大 key 操作,会阻塞主线程,导致整个Redis卡死。所以我们在生产环境严禁使用 keys *。”

📊 【考点3:Redis支持哪些数据类型?】

👉 基础回答:String、Hash、List、Set、ZSet。

👉 生产级回答(加分项):还要加上 Bitmap(位图,用于签到、活跃用户统计)、HyperLogLog(用于基数统计,比如UV,误差0.81%)、Geo(用于附近的人、距离计算)。

💡 面试官想听的:能说出每种类型在什么场景下使用。比如:“Hash适合存对象,String适合做计数器,ZSet适合做排行榜和延迟队列。”

🛠️ 【考点4:Redis内存回收(淘汰)策略有哪些?】

👉 生产级回答:Redis有8种淘汰策略,最常用的4种是:

  1. noeviction:不淘汰,内存满时报错(默认)。

  2. allkeys-lru:所有key中,淘汰最近最少使用的(推荐用于纯缓存场景)。

  3. volatile-lru:在设置了过期时间的key中,淘汰最近最少使用的。

  4. allkeys-random:随机淘汰。

💡 面试官想听的:“生产环境建议用 allkeys-lru 或 allkeys-lfu。如果数据绝对不能丢,那就不应该用Redis做唯一存储,要配合MySQL做持久化,并且必须配置 noeviction 并开启告警。”

🛠️ 【考点5:Redis两种持久化RDB和AOF的区别?】

👉 核心区别(记忆版):RDB:快照方式,二进制文件,恢复速度快,但可能丢失最后一次快照后的数据。适合做冷备。AOF:日志方式,记录写命令,文件体积大,恢复慢,但数据安全性高(最多丢1秒)。适合做主备切换。

👉 生产级回答(加分项):“生产环境我们通常会同时开启RDB和AOF。Redis 4.0以后支持混合持久化,AOF重写时会把RDB的内容写在AOF文件头部,兼顾了恢复速度和数据安全。⚠️ 但要注意:AOF重写和RDB fork时会消耗大量CPU和内存(COW写时复制会导致内存翻倍),如果内存碎片率高,fork可能会卡顿。我们通常会把持久化操作放在从节点上执行,避免影响主节点性能。”

🚀 【考点6:Redis内存持续飙升,该如何排查?(实战大题)】

这道题最能区分新手和老手。

👉 标准回答:

  1. 查内存使用:info memory 看 used_memory 和 used_memory_rss。

  2. 找大Key:redis-cli --bigkeys 或者 redis-cli --hotkeys(需开启LFU)。

  3. 看碎片率:mem_fragmentation_ratio,如果大于1.5,说明碎片多,可开启 activedefrag yes。

  4. 看连接数:info clients,看是否有异常客户端连接。

💡 面试官想听的:“排查大Key是重中之重。如果发现某个Hash有几十万个字段,那就是代码写的问题,比如把用户行为日志全塞进一个Hash了。解决办法是拆分大Key,或者用 UNLINK 异步删除,绝对不能用 DEL,否则会阻塞主线程。”

你们在生产环境里,Redis内存飙升最常见的原因是什么?是大Key、还是客户端缓冲区积压?欢迎评论区聊聊。

上面展示的仅仅是核心考点。为了方便大家复习,我整理了《Redis生产级面试通关全集》PDF + 4个生产排查脚本(包含内存碎片告警、大Key安全扫描、慢查询分析)。

👉 关注公众号【DevOps-运维小子】,后台回复【Redis面试】,直接领走!

(预告:下一篇讲“持久化与主从复制”,Redis INFO命令怎么看?主从延迟怎么排查?全是运维必考题。)