一、Redis基础三连问(必考题)
Q1:Redis为什么这么快?!!!
面试官最爱问的"必杀题"!回答要像机关枪一样快速输出:
- 纯内存操作(废话!但必须说)
- 单线程架构(注意:6.0后有多线程了!)
- I/O多路复用(划重点!)
- 高效数据结构(后面细说)
踩坑预警:千万别说是多线程!虽然Redis6.0支持了多线程I/O,但处理命令还是单线程(重要的事情说三遍)
Q2:5种基础数据结构都搞不清?
这是送分题啊兄弟们!用生活场景记:
- String → 计数器(比如点赞数)
- List → 消息队列(虽然现在有Stream了)
- Hash → 购物车数据
- Set → 共同好友(交集操作)
- Zset → 实时排行榜(玩过王者荣耀吧?)
个人经验:Zset的跳表实现原理建议背熟,面试官超爱问这个!
二、持久化机制深度剖析
RDB vs AOF 世纪大战
RDB(快照) | AOF(日志) | |
---|---|---|
存储方式 | 二进制压缩文件 | 文本命令日志 |
恢复速度 | 快如闪电! | 慢如老牛… |
数据安全 | 可能丢分钟级数据 | 最多丢1秒数据(fsync策略) |
文件大小 | 小(压缩过) | 大得离谱(需定期重写) |
血泪教训:生产环境一定要RDB+AOF混合使用(Redis4.0+支持)
三、集群方案灵魂拷问
主从复制连环炮
- 全量同步 vs 增量同步区别?(答不上直接凉凉)
- 主从数据延迟怎么破?(监控
master_repl_offset
差值) - 脑裂问题解决方案?(min-slaves配置)
Cluster模式必问点
- 哈希槽为什么是16384个?(数学问题,准备好计算器)
- 节点通信用的Gossip协议(八卦协议?没错!)
- 迁移数据时的ASK重定向机制
冷知识:Redis Cluster不支持跨节点事务,事务只能在单个节点执行!
四、缓存三大难题解决方案
1. 缓存雪崩 → 集体阵亡
应对策略:
- 随机过期时间(别都设一样的!)
- 熔断降级(比如Hystrix)
- 永不过期策略(配合定期更新)
2. 缓存穿透 → 疯狂查库
防御姿势:
- 布隆过滤器(存在误判可能)
- 缓存空对象(注意设置短过期时间)
- 接口层校验(比如ID必须>0)
3. 缓存击穿 → 热点数据暴毙
终极方案:
- 互斥锁(Redis的setnx)
- 逻辑过期时间(物理不过期)
- 热点数据永不过期(慎用!)
五、高频进阶问题清单
1. 内存淘汰策略(6种)
- volatile-lru → 最近最少使用(有过期时间的键)
- allkeys-lfu → 整个数据集最少使用(4.0+)
面试技巧:把LRU和LFU的区别说清楚,能加分!
2. 分布式锁红黑榜
- setnx + expire → 原子性问题!
- RedLock算法 → 争议很大但必问
- 看门狗机制 → 这个得会手写实现
3. 大Key问题排查
- redis-cli --bigkeys(基础操作)
- 内存碎片率监控(info memory)
- 渐进式删除(别直接用del!)
六、压轴大题:应用场景设计
场景题:如何实现延迟队列?
- 方案1:Zset时间戳做score
- 方案2:Redis5.0的Stream
- 方案3:多个队列+定时扫描
真实案例:我司订单系统用的方案1,日均处理百万级延迟消息!
七、最后叮嘱(必看!)
- Redis6.0新特性要准备(多线程IO、ACL权限)
- 准备1-2个线上问题排查案例(比如缓存穿透事故)
- 熟悉info命令关键指标(内存、持久化、集群状态)
- 最新版本是7.x(虽然很多公司还在用4.x)
终极建议:面试前用redis-benchmark
跑下压测,把QPS数据记下来(比如单机读10w+/s),绝对让面试官眼前一亮!