一、Redis基础必考题
1. Redis的五种基础数据类型(必问!)
String(字符串)、List(链表)、Hash(哈希)、Set(集合)、SortedSet(有序集合)这五个老熟人大家都会背对吧?但面试官真正想听的是实际应用场景!
举个真实案例:某电商平台用String存商品详情缓存(注意设置过期时间!),用Hash存用户购物车数据(一个用户对应多个商品),SortedSet搞商品热榜排行(自动排序特性真香),Set做用户标签系统(交集并集操作太方便了)
2. 持久化机制终极对决(RDB vs AOF)
这里经常埋雷!记住两个关键点:
- RDB是定时快照(适合灾难恢复),但可能丢失最后几分钟数据
- AOF记录每个写操作(数据更安全),但文件体积大恢复慢
(划重点)生产环境推荐混合模式!新版Redis默认开启的,既有RDB的快速恢复,又有AOF的操作记录。配置文件中这两个参数一定得知道:
aof-use-rdb-preamble yes
二、进阶灵魂拷问
3. 缓存穿透/雪崩/击穿解决方案(送命题!)
这三个概念经常被混淆,用大白话解释:
- 穿透:疯狂查不存在的数据 → 布隆过滤器+空值缓存
- 雪崩:大量缓存集体过期 → 随机过期时间+二级缓存
- 击穿:热点key突然失效 → 互斥锁+永不过期策略
(血泪教训)曾经有个系统没做防护,促销时Redis集群直接被打挂!后来用Redisson实现的分布式锁才解决,代码大概长这样:
RLock lock = redisson.getLock("product_lock");
try {
lock.lock();
// 查库写缓存操作
} finally {
lock.unlock();
}
4. Redis为什么这么快?(底层原理必杀技)
别只说内存操作!要说出这三点才算及格:
- 单线程避免上下文切换(6.0版本后有多线程IO)
- IO多路复用模型(select/epoll机制)
- 高效数据结构(ziplist、quicklist、跳跃表)
特别说下跳跃表:SortedSet的核心结构,插入删除都是O(logN),比平衡树实现简单多了。画个示意图更好理解:
第3层: 1 → 9
第2层: 1 → 5 → 9
第1层: 1→3→5→7→9
三、分布式场景实战
5. 集群模式怎么玩转?(大厂必问)
三种主流方案对比:
方案 | 优点 | 缺点 |
---|---|---|
主从复制 | 部署简单 | 故障需手动切换 |
Sentinel | 自动故障转移 | 扩容麻烦 |
Cluster | 数据分片、自动迁移 | 客户端需要支持 |
(重要提示)Cluster模式每个节点都存部分数据,16384个哈希槽要记牢!迁移数据时用CLUSTER SETSLOT
命令,记得先迁移数据再改节点配置。
6. 分布式锁的坑有多深?(实战陷阱)
用SETNX命令就万事大吉?Too young!要考虑这些坑:
- 超时时间设置不合理导致锁提前释放
- 业务执行时间超过锁有效期
- 主从切换时的锁丢失问题
(正确姿势)使用Redlock算法,至少要在N/2+1个节点上获取锁才算成功。不过实际开发中更推荐用Redisson框架,已经帮我们封装好了。
四、高频扩展题
7. 内存淘汰策略怎么选?(调优必备)
当内存不足时,Redis提供6种策略:
- allkeys-lru:最近最少使用(推荐)
- volatile-ttl:快过期的优先
- noeviction:直接报错(默认)
(配置技巧)maxmemory参数不要设成物理内存大小,留出30%给系统和其他进程。监控时重点看used_memory
和mem_fragmentation_ratio
指标。
8. Pipeline和事务的区别(容易混淆)
这俩经常被搞混:
- Pipeline:批量发送命令(减少网络开销),不保证原子性
- 事务:MULTI/EXEC包裹的命令(保证顺序执行),但遇到错误会继续执行
(性能实测)在需要批量操作的场景下,Pipeline的吞吐量能提升5-10倍!但要注意每次pipeline的命令数量不要超过5000,否则会阻塞其他请求。
五、2024新趋势
9. Redis Stack是什么?(最新考点)
Redis官方推出的新神器!集成了:
- RedisJSON(直接存JSON数据)
- RedisSearch(全文检索)
- RedisTimeSeries(时序数据处理)
- RedisGraph(图数据库)
(应用场景)比如物联网项目用TimeSeries存传感器数据,社交网络用Graph处理好友关系。现在面试官越来越爱问这些新模块了!
10. 大厂怎么用Redis?(加分项)
蚂蚁金服的OceanBase、美团的Cell架构都重度依赖Redis。分享个真实案例:某视频平台用Redis+GEO实现附近的人功能,经纬度数据存SortedSet,查询用GEORADIUS
命令,响应时间控制在10ms内!
六、面试准备建议
- 至少搭建一次Redis集群(用Docker compose很方便)
- 重点掌握Redis的监控命令(INFO、MONITOR)
- 准备一个线上问题排查案例(比如缓存雪崩经历)
- 学习Redis源码?从dict.c和ziplist.c开始看
最后提醒:Redis面试最爱问实现原理和实战经验!死记硬背答案肯定挂,一定要结合自己的项目经历来说。祝大家面试时都能像Redis一样又快又稳!(手动狗头)